Форум сайта python.su
1
Здравствуйте!
Разбираюсь с контекстными вызовами. Столкнулся с ошибкой, которую не могу уже некоторое время побороть.
Написал свой класс:
import psycopg2 from psycopg2 import pool class PgDB: """Класс для работы с БД""" def __init__(self): connection_string = "...тут строка подключения..." try: self.__pool = psycopg2.pool.ThreadedConnectionPool(1, 10, connection_string) self.__conn = self.__pool.getconn() except psycopg2.pool.PoolError as e: self.__pool = None self.__conn = None raise(e) except Exception as e: print(" Unknown error") raise(e) def __enter__(self): return self.__conn def __exit__(self, exc_type, exc_val, exc_tb): if exc_type is not None: self.__conn.rollback() try: self.__conn.commit() except Exception: self.__conn.rollback() finally: self.__conn.close() def execute(self, sqltext='select 1'): ps_cursor = self.__conn.cursor() ps_cursor.execute(sqltext) records = ps_cursor.fetchall() ps_cursor.close() self.__pool.putconn(self.__conn) return records
print(PgDB().execute('select * from objects limit 10'))
with PgDB() as db: a = db.execute('select * from objects limit 10')
Отредактировано lifemaker (Окт. 17, 2019 15:58:56)
Офлайн
44
https://nuancesprog.ru/p/4398/
и вставьте ссылку на его url Офлайн
1
AD0DE412Спасибо за ответ! К сожалению я не смог его приметить. Уровни изоляции в данном случае мне не нужны, т.к. в дальнейшем я планирую передавать подключение к произвольному серверу.
https://nuancesprog.ru/p/4398/
def __enter__(self): return self
Офлайн