Files
DevOpsLab/app/db/session.py
Сергей Антропов 1fbf9185a2 feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile
- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
2026-02-15 22:59:02 +03:00

73 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Управление сессиями базы данных
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
from sqlalchemy import create_engine
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
from sqlalchemy.orm import sessionmaker
from app.core.config import settings
from app.models.database import Base
# Создание движка базы данных
# Для SQLite используем sync движок, для PostgreSQL - async
if settings.DATABASE_URL.startswith("sqlite"):
# SQLite
engine = create_engine(
settings.DATABASE_URL.replace("sqlite:///", "sqlite:///"),
connect_args={"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
async_engine = None
AsyncSessionLocal = None
else:
# PostgreSQL с asyncpg
async_database_url = settings.DATABASE_URL.replace("postgresql://", "postgresql+asyncpg://")
async_engine = create_async_engine(
async_database_url,
echo=False,
future=True
)
AsyncSessionLocal = async_sessionmaker(
async_engine,
class_=AsyncSession,
expire_on_commit=False
)
engine = None
SessionLocal = None
def init_db():
"""Инициализация базы данных (создание таблиц через миграции)"""
# Таблицы создаются через Alembic миграции
# Здесь только проверяем подключение
if engine:
try:
from app.models.user import Base as UserBase
from app.models.database import Base as DatabaseBase
# В продакшене используем миграции
pass
except Exception as e:
import logging
logging.getLogger(__name__).error(f"Ошибка инициализации БД: {e}")
def get_db():
"""Получение сессии базы данных (для sync)"""
if SessionLocal is None:
raise RuntimeError("Sync database not configured")
db = SessionLocal()
try:
yield db
finally:
db.close()
async def get_async_db():
"""Получение async сессии базы данных"""
if AsyncSessionLocal is None:
raise RuntimeError("Async database not configured")
async with AsyncSessionLocal() as session:
yield session