py.lib.aw_db_tools
2024-02-27
py.lib.aw_db_tools/src/aw_db_tools/sqlite.py
..init
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/aw_db_tools/sqlite.py Tue Feb 27 21:06:11 2024 +0300 1.3 @@ -0,0 +1,44 @@ 1.4 +# coding: utf-8 1.5 +"""\ 1.6 +Обёртка вокруг стандартного модуля работы с СУБД SQLite. Создана исключительно из собственных представлений 1.7 +о прекрасном. 1.8 +""" 1.9 + 1.10 +import sqlite3 1.11 +from sqlite3 import Error as DBError, IntegrityError 1.12 + 1.13 + 1.14 +class DB: 1.15 + def __init__(self, db_file): 1.16 + self._conn = sqlite3.connect(db_file) 1.17 + self._ex = self._conn.execute 1.18 + self.commit = self._conn.commit 1.19 + self.rollback = self._conn.rollback 1.20 + 1.21 + # DB PREP 1.22 + self._ex("PRAGMA journal=WAL") 1.23 + self._ex("PRAGMA foreign_keys=ON") 1.24 + self.commit() 1.25 + 1.26 + def __del__(self): 1.27 + try: 1.28 + self.rollback() 1.29 + self._conn.close() 1.30 + 1.31 + except: 1.32 + pass 1.33 + 1.34 + def __call__(self, *a, **kwa): 1.35 + cur = self._conn.cursor() 1.36 + cur.execute(*a, **kwa) 1.37 + return cur 1.38 + 1.39 + def cq(self, *a, **wa): 1.40 + try: 1.41 + res = self(*a, **wa) 1.42 + self.commit() 1.43 + return res 1.44 + 1.45 + except DBError as e: 1.46 + self.rollback() 1.47 + raise e