feat(db): Database initialization has been added

This commit is contained in:
Kita Trofimov
2025-10-27 23:02:19 +03:00
parent c33e8798ed
commit 052c93928c
3 changed files with 180 additions and 28 deletions
+31 -27
View File
@@ -1,21 +1,29 @@
import psycopg2
import os
import logging
from contextlib import contextmanager
from typing import Generator
from loguru import logger
from utils.loadDotEnv import initializeENV
initializeENV()
logger = logging.getLogger(__name__)
def PSQLConnect():
conn = psycopg2.connect(os.getenv('POSTDRESS_CONNECTION'))
conn_str = os.getenv('POSTGRES_CONNECTION')
if not conn_str:
logger.error("POSTGRES_CONNECTION не найден в .env файле")
raise ValueError("POSTGRES_CONNECTION не найден в .env файле")
conn = psycopg2.connect(conn_str)
logger.debug("Подключение к БД установлено")
return conn
def PSQLCursor(conn):
cur = conn.cursor()
cur = conn.cursor()
logger.debug("Курсор БД создан")
return cur
@@ -24,38 +32,34 @@ def get_connection() -> Generator[psycopg2.extensions.connection, None, None]:
conn = None
try:
conn = PSQLConnect()
logger.debug("Подключение к БД установлено")
logger.debug("Контекст подключения к БД открыт")
yield conn
except psycopg2.OperationalError as e:
logger.error(f"Ошибка подключения к БД: {e}")
raise
except psycopg2.Error as e:
logger.error(f"Ошибка PostgreSQL: {e}")
raise
except Exception as e:
logger.error(f"Неожиданная ошибка при работе с БД: {e}")
logger.error(f"Ошибка в контексте подключения: {e}")
if conn:
conn.rollback()
logger.debug("Откат транзакции выполнен")
raise
finally:
if conn:
try:
conn.close()
logger.debug("Соединение с БД закрыто")
except Exception as e:
logger.warning(f"Ошибка при закрытии соединения: {e}")
conn.close()
logger.debug("Подключение к БД закрыто")
def test_connection() -> bool:
try:
with get_connection() as conn:
cur = PSQLCursor(conn)
try:
cur.execute("SELECT version();")
version = cur.fetchone()
logger.debug(f"Версия PostgreSQL: {version[0]}")
return True
finally:
cur.close()
logger.debug("Курсор закрыт")
cur.execute("SELECT version();")
version = cur.fetchone()
logger.info(f"Подключение к БД успешно: {version[0]}")
cur.close()
logger.debug("Курсор БД закрыт")
return True
except Exception as e:
logger.error(f"Тест подключения к БД провален: {e}")
logger.error(f"Ошибка подключения к БД: {e}")
return False
print(test_connection())
if __name__ == "__main__":
test_connection()