py.lib.aw_db_tools

Yohn Y. 2024-02-27

0:4b0d10bfa023 Go to Latest

py.lib.aw_db_tools/src/aw_db_tools/sqlite.py

..init

History
awgur@0 1 # coding: utf-8
awgur@0 2 """\
awgur@0 3 Обёртка вокруг стандартного модуля работы с СУБД SQLite. Создана исключительно из собственных представлений
awgur@0 4 о прекрасном.
awgur@0 5 """
awgur@0 6
awgur@0 7 import sqlite3
awgur@0 8 from sqlite3 import Error as DBError, IntegrityError
awgur@0 9
awgur@0 10
awgur@0 11 class DB:
awgur@0 12 def __init__(self, db_file):
awgur@0 13 self._conn = sqlite3.connect(db_file)
awgur@0 14 self._ex = self._conn.execute
awgur@0 15 self.commit = self._conn.commit
awgur@0 16 self.rollback = self._conn.rollback
awgur@0 17
awgur@0 18 # DB PREP
awgur@0 19 self._ex("PRAGMA journal=WAL")
awgur@0 20 self._ex("PRAGMA foreign_keys=ON")
awgur@0 21 self.commit()
awgur@0 22
awgur@0 23 def __del__(self):
awgur@0 24 try:
awgur@0 25 self.rollback()
awgur@0 26 self._conn.close()
awgur@0 27
awgur@0 28 except:
awgur@0 29 pass
awgur@0 30
awgur@0 31 def __call__(self, *a, **kwa):
awgur@0 32 cur = self._conn.cursor()
awgur@0 33 cur.execute(*a, **kwa)
awgur@0 34 return cur
awgur@0 35
awgur@0 36 def cq(self, *a, **wa):
awgur@0 37 try:
awgur@0 38 res = self(*a, **wa)
awgur@0 39 self.commit()
awgur@0 40 return res
awgur@0 41
awgur@0 42 except DBError as e:
awgur@0 43 self.rollback()
awgur@0 44 raise e