/
Ao
/
MaxReport
Обзор
Документация
Войти
/
Ao
/
MaxReport
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
report-system/src/core/database.py
56 строк
2 KB
AoAnima
first_commit
13 июл 2026, 17:47
13 июл 2026, 17:47
f1a670a
Код
Авторство
О чём код?
"""Модуль базы данных — асинхронный движок SQLAlchemy и фабрика сессий. Настраивает пул соединений к PostgreSQL и предоставляет Dependency Injection для получения сессий в эндпоинтах FastAPI. Контракт: общий слой для всех сервисов (M1–M10). """ from collections.abc import AsyncGenerator from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase from .config import settings """Асинхронный движок SQLAlchemy с пулом соединений.""" engine = create_async_engine( settings.database_url, echo=settings.database_echo, pool_pre_ping=True, pool_size=20, max_overflow=10, ) """Фабрика асинхронных сессий для работы с PostgreSQL.""" async_session_factory = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False, ) class Base(DeclarativeBase): """Базовый класс для всех ORM-моделей системы MAX. Все модели (User, Municipality, Campaign, Submission и др.) наследуются от этого класса для получения функциональности SQLAlchemy. """ pass async def get_db() -> AsyncGenerator[AsyncSession, None]: """FastAPI Dependency: создаёт и возвращает асинхронную сессию БД. Автоматически фиксирует транзакцию при успешном завершении и откатывает при возникновении исключения. """ async with async_session_factory() as session: try: yield session await session.commit() except Exception: await session.rollback() raise finally: await session.close()