py.lib

Yohn Y. 2019-11-11 Parent:8dcee5f5df4f

11:9a4eb7660c11 Go to Latest

py.lib/awNet/db/sqlite.py

+ Добавлены простые логгеры

History
awgur@0 1 # -*- coding: utf-8 -*-
awgur@0 2 # Dep
awgur@0 3 from sqlite3 import connect as _sqlite_connect
awgur@0 4 # Exceptions
awgur@0 5 from sqlite3 import Warning, Error, DatabaseError, IntegrityError, ProgrammingError
awgur@0 6
awgur@0 7 # --- # PROCS # --- #
awgur@0 8 def GetDB(db_file):
awgur@0 9 def func():
awgur@0 10 return DB(db_file)
awgur@0 11 return func
awgur@0 12
awgur@0 13 # --- # CLASS # --- #
awgur@0 14 class DB:
awgur@0 15 def __init__(self, db_file):
awgur@0 16 self._con = None
awgur@0 17 self._con = _sqlite_connect(db_file)
awgur@0 18 self.q = self._con.execute
awgur@0 19 self.qm = self._con.executemany
awgur@0 20 self.commit = self._con.commit
awgur@0 21 self.rollback = self._con.rollback
awgur@0 22
awgur@0 23 # DB PREP
awgur@0 24 self.cq("PRAGMA journal=WAL")
awgur@0 25
awgur@1 26 def __call__(self, *a, **wa):
awgur@1 27 return self.q(*a, **wa)
awgur@0 28
awgur@0 29 def __del__(self):
awgur@0 30 if self._con == None: return
awgur@0 31 try:
awgur@0 32 self.rollback()
awgur@0 33 self._con.close()
awgur@0 34 except Error:
awgur@0 35 pass
awgur@0 36 except Warning:
awgur@0 37 pass
awgur@0 38
awgur@0 39 def cq(self, *a, **wa):
awgur@0 40 try:
awgur@0 41 res = self.q(*a, **wa)
awgur@0 42 self.commit()
awgur@0 43 return res
awgur@0 44 except Exception as e:
awgur@0 45 self.rollback()
awgur@0 46 raise e
awgur@0 47
awgur@0 48 def cqm(self, *a, **wa):
awgur@0 49 try:
awgur@0 50 res = self.qm(*a, **wa)
awgur@0 51 self.commit()
awgur@0 52 return res
awgur@0 53 except Exception as e:
awgur@0 54 self.rollback()
awgur@0 55 raise e