py.lib
18:a8460893606a Browse Files
. Наведение порядка с PostgreSQL
db/pg.py db/pg/psy.py db/pg/py.py
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/db/pg.py Sun Jun 06 14:04:19 2021 +0300 1.3 @@ -0,0 +1,64 @@ 1.4 +# -*- coding: utf-8 -*- 1.5 +import psycopg2 1.6 +from psycopg2 import Error as DBError, Warning, DataError, IntegrityError, ProgrammingError 1.7 +# DBError: Клас-родитель для всех ошибок 1.8 +# DataError: Проблема с данными (деление на ноль, численное изначение за областью значение и пр.) 1.9 +# IntegrityError: задеты ограничения целостности БД (уникольность, внешние ключи и пр.) 1.10 +# ProgrammingError: ошибки в запросах (таблица не найдена, или уже существует, ошибка в синтаксисе запроса и пр.) 1.11 + 1.12 +import psycopg2.extensions 1.13 +psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) 1.14 +psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY) 1.15 + 1.16 + 1.17 +class Error(Exception): 1.18 + pass 1.19 + 1.20 + 1.21 +class DB(object): 1.22 + def __init__(self, **kva): 1.23 + self._conn = psycopg2.connect(**kva) 1.24 + self.commit = self._conn.commit 1.25 + self.rollback = self._conn.rollback 1.26 + self.cursor = self._conn.cursor 1.27 + self.reset = self._conn.reset 1.28 + 1.29 + def __enter__(self, *a, **kva): 1.30 + return self._conn.__enter__(*a, **kva) 1.31 + 1.32 + def __exit__(self, *a, **kva): 1.33 + return self._conn.__exit__(*a, **kva) 1.34 + 1.35 + def __call__(self, *a, **kva): 1.36 + _cur = self.cursor() 1.37 + _cur.execute(*a, **kva) 1.38 + return _cur 1.39 + 1.40 + def cq(self, *a, **kva): 1.41 + try: 1.42 + _cur = self.cursor() 1.43 + _cur.execute(*a, **kva) 1.44 + self.commit() 1.45 + return _cur 1.46 + except Exception as e: 1.47 + self.rollback() 1.48 + raise e 1.49 + 1.50 + def close(self): 1.51 + try: 1.52 + self.rollback() 1.53 + self._conn.close() 1.54 + except: 1.55 + pass 1.56 + 1.57 + def __del__(self): 1.58 + self.close() 1.59 + 1.60 + def __repr__(self): 1.61 + return 'DB(%s)' % self._conn.dsn 1.62 + 1.63 + 1.64 + 1.65 + 1.66 + 1.67 +
2.1 --- a/db/pg/psy.py Sun Feb 21 17:40:03 2021 +0300 2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 2.3 @@ -1,69 +0,0 @@ 2.4 -# -*- coding: utf-8 -*- 2.5 -import psycopg2 2.6 -from psycopg2 import Error as DBError, Warning, DataError, IntegrityError, ProgrammingError 2.7 -# DBError: Клас-родитель для всех ошибок 2.8 -# DataError: Проблема с данными (деление на ноль, численное изначение за областью значение и пр.) 2.9 -# IntegrityError: задеты ограничения целостности БД (уникольность, внешние ключи и пр.) 2.10 -# ProgrammingError: ошибки в запросах (таблица не найдена, или уже существует, ошибка в синтаксисе запроса и пр.) 2.11 - 2.12 -import psycopg2.extensions 2.13 -psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) 2.14 -psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY) 2.15 - 2.16 -class Error(Exception): pass 2.17 - 2.18 - 2.19 -def dbFactory(**kva): 2.20 - """ Фабрика объектов 2.21 - """ 2.22 - def _func(): 2.23 - return DB(**kva) 2.24 - return _func 2.25 - 2.26 -class DB(object): 2.27 - def __init__(self, **kva): 2.28 - self._conn = psycopg2.connect(**kva) 2.29 - self.commit = self._conn.commit 2.30 - self.rollback = self._conn.rollback 2.31 - self.cursor = self._conn.cursor 2.32 - self.reset = self._conn.reset 2.33 - 2.34 - def __enter__(self, *a, **kva): 2.35 - return self._conn.__enter__(*a, **kva) 2.36 - 2.37 - def __exit__(self, *a, **kva): 2.38 - return self._conn.__exit__(*a, **kva) 2.39 - 2.40 - def __call__(self, *a, **kva): 2.41 - _cur = self.cursor() 2.42 - _cur.execute(*a, **kva) 2.43 - return _cur 2.44 - 2.45 - def cq(self, *a, **kva): 2.46 - try: 2.47 - _cur = self.cursor() 2.48 - _cur.execute(*a, **kva) 2.49 - self.commit() 2.50 - return _cur 2.51 - except Exception as e: 2.52 - self.rollback() 2.53 - raise e 2.54 - 2.55 - def close(self): 2.56 - try: 2.57 - self.rollback() 2.58 - self._conn.close() 2.59 - except: 2.60 - pass 2.61 - 2.62 - def __del__(self): 2.63 - self.close() 2.64 - 2.65 - def __repr__(self): 2.66 - return 'DB(%s)' % self._conn.dsn 2.67 - 2.68 - 2.69 - 2.70 - 2.71 - 2.72 -
3.1 --- a/db/pg/py.py Sun Feb 21 17:40:03 2021 +0300 3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 3.3 @@ -1,31 +0,0 @@ 3.4 -import postgresql.driver as DBM 3.5 -import postgresql.exceptions as DBErr 3.6 - 3.7 -def GetDB(*, name, user, passwd, host='localhost', port=5432): 3.8 - """ 3.9 - На случай когда лениво каждый раз вызывать базу со всеми регалиями, 3.10 - регалии сохраняем в специального вызывателя :))) 3.11 - """ 3.12 - def func (): 3.13 - return DB(name, user, passwd, host=host, port=port) 3.14 - return func 3.15 - 3.16 -class DB: 3.17 - def __init__(self, db_name, db_user, db_passwd, *, host='localhost', port=5432): 3.18 - self._db = DBM.connect( 3.19 - host = host, 3.20 - port = port, 3.21 - user = db_user, 3.22 - password = db_passwd, 3.23 - database = db_name 3.24 - ) 3.25 - self.xact = self._db.xact 3.26 - self.q = self._db.query 3.27 - self.pq = self._db.prepare 3.28 - self.ex = self._db.execute 3.29 - self.proc = self._db.proc 3.30 - self.close = self._db.close 3.31 - 3.32 - def __del__(self): 3.33 - if self._db.state != 'closed': 3.34 - self._db.close() 3.35 \ No newline at end of file