forked from zovos/bot_tg
- Все 4 SQLite базы объединены в одну PostgreSQL - Новый db.py с ThreadedConnectionPool (psycopg2) - docker-compose: сервис postgres с healthcheck, данные в ./db/postgres - scripts/migrate_sqlite_to_pg.py — миграция существующих данных - Убраны мёртвый код и дублирующий import в main.py и talk_handler.py - .env удалён из git-индекса Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
35 lines
823 B
Python
35 lines
823 B
Python
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)
|