py.lib

Yohn Y. 2023-01-30 Parent:c6c14e492bd4

44:bfc3a109c06c Go to Latest

py.lib/db/pg.py

. Убираем лишние форматированные строки * Проблема с созданием вложенных журналов в сложных ситуациях с локами и ротируемым журналом.

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