Files
main_backend/cpv3/db/session.py
T
2026-02-27 23:33:56 +03:00

47 lines
1.0 KiB
Python

from __future__ import annotations
from collections.abc import AsyncGenerator
from sqlalchemy.ext.asyncio import (
AsyncSession,
async_sessionmaker,
create_async_engine,
)
from cpv3.infrastructure.settings import get_settings
_settings = get_settings()
_database_url = _settings.get_database_url()
_engine_kwargs: dict[str, bool | int] = {
"echo": _settings.debug,
"pool_pre_ping": True,
}
if not _database_url.startswith("sqlite"):
_engine_kwargs.update(
{
"pool_size": _settings.db_pool_size,
"max_overflow": _settings.db_max_overflow,
"pool_timeout": _settings.db_pool_timeout,
"pool_recycle": _settings.db_pool_recycle_seconds,
}
)
_engine = create_async_engine(
_database_url,
**_engine_kwargs,
)
SessionLocal = async_sessionmaker(
bind=_engine,
class_=AsyncSession,
expire_on_commit=False,
)
async def get_db() -> AsyncGenerator[AsyncSession, None]:
async with SessionLocal() as session:
yield session