py.lib

Yohn Y. 2022-08-27 Parent:c6c14e492bd4

42:d9a3784f681b Go to Latest

py.lib/db/pg.py

+ Возможность удаления cookie по полному объекту (полезно, когда выставляются особые параметры на cookie, и их не удаётся удалить по имени)

History
awgur@13 1 # -*- coding: utf-8 -*-
awgur@13 2 import psycopg2
awgur@20 3 from psycopg2 import Error, Warning, DataError, IntegrityError, ProgrammingError
awgur@13 4 # DBError: Клас-родитель для всех ошибок
awgur@13 5 # DataError: Проблема с данными (деление на ноль, численное изначение за областью значение и пр.)
awgur@26 6 # IntegrityError: задеты ограничения целостности БД (уникальность, внешние ключи и пр.)
awgur@13 7 # ProgrammingError: ошибки в запросах (таблица не найдена, или уже существует, ошибка в синтаксисе запроса и пр.)
awgur@13 8
awgur@26 9
awgur@13 10 import psycopg2.extensions
awgur@13 11 psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
awgur@13 12 psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
awgur@13 13
awgur@13 14
awgur@13 15 class DB(object):
awgur@13 16 def __init__(self, **kva):
awgur@13 17 self._conn = psycopg2.connect(**kva)
awgur@13 18 self.commit = self._conn.commit
awgur@13 19 self.rollback = self._conn.rollback
awgur@13 20 self.cursor = self._conn.cursor
awgur@13 21 self.reset = self._conn.reset
awgur@13 22
awgur@13 23 def __enter__(self, *a, **kva):
awgur@13 24 return self._conn.__enter__(*a, **kva)
awgur@13 25
awgur@13 26 def __exit__(self, *a, **kva):
awgur@13 27 return self._conn.__exit__(*a, **kva)
awgur@13 28
awgur@13 29 def __call__(self, *a, **kva):
awgur@13 30 _cur = self.cursor()
awgur@13 31 _cur.execute(*a, **kva)
awgur@26 32
awgur@13 33 return _cur
awgur@13 34
awgur@13 35 def cq(self, *a, **kva):
awgur@13 36 try:
awgur@13 37 _cur = self.cursor()
awgur@13 38 _cur.execute(*a, **kva)
awgur@13 39 self.commit()
awgur@13 40 return _cur
awgur@26 41
awgur@13 42 except Exception as e:
awgur@13 43 self.rollback()
awgur@13 44 raise e
awgur@13 45
awgur@13 46 def close(self):
awgur@13 47 try:
awgur@13 48 self.rollback()
awgur@13 49 self._conn.close()
awgur@26 50
awgur@13 51 except:
awgur@13 52 pass
awgur@13 53
awgur@13 54 def __del__(self):
awgur@13 55 self.close()
awgur@13 56
awgur@13 57 def __repr__(self):
awgur@13 58 return 'DB(%s)' % self._conn.dsn
awgur@13 59
awgur@13 60
awgur@13 61
awgur@13 62
awgur@13 63
awgur@13 64