Files
Backend/db/connection.py
T

60 lines
1.8 KiB
Python
Raw Normal View History

import psycopg2
import os
from loguru import logger
from contextlib import contextmanager
from typing import Generator
from utils.loadDotEnv import initializeENV
initializeENV()
def PSQLConnect():
conn = psycopg2.connect(os.getenv('POSTDRESS_CONNECTION'))
return conn
def PSQLCursor(conn):
cur = conn.cursor()
return cur
@contextmanager
def get_connection() -> Generator[psycopg2.extensions.connection, None, None]:
conn = None
try:
conn = PSQLConnect()
logger.info("Подключение к БД установлено")
yield conn
except psycopg2.OperationalError as e:
logger.error(f"Ошибка подключения к БД:\n{e}")
2025-10-26 19:32:34 +03:00
raise
except psycopg2.Error as e:
logger.error(f"Ошибка PostgreSQL:\n{e}")
raise
except Exception as e:
logger.error(f"Неожиданная ошибка при работе с БД:\n{e}")
raise
finally:
if conn:
2025-10-26 19:32:34 +03:00
try:
conn.close()
logger.debug("Соединение с БД закрыто")
except Exception as e:
logger.warning(f"Ошибка при закрытии соединения:\n{e}")
def test_connection() -> bool:
try:
with get_connection() as conn:
cur = PSQLCursor(conn)
2025-10-26 19:32:34 +03:00
try:
cur.execute("SELECT version();")
version = cur.fetchone()
logger.debug(f"Версия PostgreSQL: {version[0]}")
return True
finally:
cur.close()
logger.debug("Курсор закрыт")
except Exception as e:
logger.error(f"Тест подключения к БД провален:\n{e}")
return False
logger.debug(test_connection())