py.lib

Yohn Y. 2022-08-20 Parent:84b54a8a6d4c

38:4f4cc2fc9805 Go to Latest

py.lib/db/sqlite.py

. Полный рефакторинг кода модулей dataclass_utils.py и config_parse_helper.py. Теперь логика предсказуема. + функция dataobj_extract не просто бездумно загоняет данные в класс данных, но имеет функционал проверки данных с возбуждением исключения при разнице (по умолчанию) и принудительного приведения типов.

History
awgur@13 1 # coding: utf-8
awgur@13 2 import sqlite3
awgur@14 3 from sqlite3 import Error, IntegrityError
awgur@13 4
awgur@34 5
awgur@13 6 class DB:
awgur@34 7 def __init__(self, db_file):
awgur@34 8 self._conn = sqlite3.connect(db_file)
awgur@34 9 self._ex = self._conn.execute
awgur@34 10 self.commit = self._conn.commit
awgur@34 11 self.rollback = self._conn.rollback
awgur@34 12
awgur@34 13 # DB PREP
awgur@34 14 self._ex("PRAGMA journal=WAL")
awgur@34 15 self._ex("PRAGMA foreign_keys=ON")
awgur@34 16 self.commit()
awgur@34 17
awgur@34 18 def __del__(self):
awgur@34 19 try:
awgur@34 20 self.rollback()
awgur@34 21 self._conn.close()
awgur@34 22 except:
awgur@34 23 pass
awgur@34 24
awgur@34 25 def __call__(self, *a, **kwa):
awgur@34 26 cur = self._conn.cursor()
awgur@34 27 cur.execute(*a, **kwa)
awgur@34 28 return cur
awgur@34 29
awgur@34 30 def cq(self, *a, **wa):
awgur@34 31 try:
awgur@34 32 res = self(*a, **wa)
awgur@34 33 self.commit()
awgur@34 34 return res
awgur@34 35 except Error as e:
awgur@34 36 self.rollback()
awgur@34 37 raise e