| 123456789101112131415161718192021222324252627282930313233343536 |
- from collections.abc import AsyncGenerator
- from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
- from sqlalchemy.orm import DeclarativeBase
- from .config import get_settings
- settings = get_settings()
- engine = create_async_engine(
- settings.database_url,
- echo=settings.debug,
- pool_pre_ping=True,
- pool_size=10,
- max_overflow=20,
- pool_recycle=3600,
- )
- async_session_factory = async_sessionmaker(
- bind=engine,
- class_=AsyncSession,
- expire_on_commit=False,
- autoflush=False,
- )
- class Base(DeclarativeBase):
- pass
- async def get_db() -> AsyncGenerator[AsyncSession, None]:
- async with async_session_factory() as session:
- try:
- yield session
- finally:
- await session.close()
|