make db.py context manager operate in a transaction.

This commit is contained in:
fiatjaf 2020-09-01 22:36:52 -03:00
parent bf3c44b3c4
commit b56877d470

View file

@ -15,22 +15,26 @@ class Database:
return self return self
def __exit__(self, exc_type, exc_val, exc_tb): def __exit__(self, exc_type, exc_val, exc_tb):
self.connection.commit()
self.cursor.close() self.cursor.close()
self.connection.close() self.connection.close()
def fetchall(self, query: str, values: tuple = ()) -> list: def fetchall(self, query: str, values: tuple = ()) -> list:
"""Given a query, return cursor.fetchall() rows.""" """Given a query, return cursor.fetchall() rows."""
self.cursor.execute(query, values) self.execute(query, values)
return self.cursor.fetchall() return self.cursor.fetchall()
def fetchone(self, query: str, values: tuple = ()): def fetchone(self, query: str, values: tuple = ()):
self.cursor.execute(query, values) self.execute(query, values)
return self.cursor.fetchone() return self.cursor.fetchone()
def execute(self, query: str, values: tuple = ()) -> None: def execute(self, query: str, values: tuple = ()) -> None:
"""Given a query, cursor.execute() it.""" """Given a query, cursor.execute() it."""
try:
self.cursor.execute(query, values) self.cursor.execute(query, values)
self.connection.commit() except sqlite3.Error as exc:
self.connection.rollback()
raise exc
def open_db(db_name: str = "database") -> Database: def open_db(db_name: str = "database") -> Database: