import logging import os from contextlib import contextmanager from typing import Generator import psycopg2 import psycopg2.extras import psycopg2.pool logger = logging.getLogger(__name__) DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://bot:botpass@postgres:5432/botdb") _pool: psycopg2.pool.ThreadedConnectionPool | None = None def _get_pool() -> psycopg2.pool.ThreadedConnectionPool: global _pool if _pool is None: _pool = psycopg2.pool.ThreadedConnectionPool(2, 10, dsn=DATABASE_URL) return _pool @contextmanager def get_conn() -> Generator[psycopg2.extensions.connection, None, None]: pool = _get_pool() conn = pool.getconn() try: yield conn conn.commit() except Exception: conn.rollback() raise finally: pool.putconn(conn)