py.lib

Yohn Y. 2021-06-06 Parent:a8460893606a Child:1a3d395b5cdf

19:26a5160d6b6b Go to Latest

py.lib/db/pg.py

. Наведение порядка с PostgreSQL . Реализация получения объекта соединения из моих обектов манипуляции с данными

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