From b56877d470aaa04c0ed872197d6a0183fd7721a8 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Tue, 1 Sep 2020 22:36:52 -0300 Subject: [PATCH] make db.py context manager operate in a transaction. --- lnbits/db.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lnbits/db.py b/lnbits/db.py index d9a86609d..316bb2173 100644 --- a/lnbits/db.py +++ b/lnbits/db.py @@ -15,22 +15,26 @@ class Database: return self def __exit__(self, exc_type, exc_val, exc_tb): + self.connection.commit() self.cursor.close() self.connection.close() def fetchall(self, query: str, values: tuple = ()) -> list: """Given a query, return cursor.fetchall() rows.""" - self.cursor.execute(query, values) + self.execute(query, values) return self.cursor.fetchall() def fetchone(self, query: str, values: tuple = ()): - self.cursor.execute(query, values) + self.execute(query, values) return self.cursor.fetchone() def execute(self, query: str, values: tuple = ()) -> None: """Given a query, cursor.execute() it.""" - self.cursor.execute(query, values) - self.connection.commit() + try: + self.cursor.execute(query, values) + except sqlite3.Error as exc: + self.connection.rollback() + raise exc def open_db(db_name: str = "database") -> Database: