|
|
"""Database session and engine configuration.""" |
|
|
|
|
|
from collections.abc import AsyncGenerator |
|
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine |
|
|
|
|
|
from app.core.config import settings |
|
|
|
|
|
|
|
|
engine = create_async_engine( |
|
|
settings.database_url, |
|
|
echo=False, |
|
|
pool_pre_ping=True, |
|
|
) |
|
|
|
|
|
|
|
|
async_session_maker = async_sessionmaker( |
|
|
engine, |
|
|
class_=AsyncSession, |
|
|
expire_on_commit=False, |
|
|
) |
|
|
|
|
|
|
|
|
async def get_db() -> AsyncGenerator[AsyncSession, None]: |
|
|
"""Dependency for getting database session.""" |
|
|
async with async_session_maker() as session: |
|
|
try: |
|
|
yield session |
|
|
finally: |
|
|
await session.close() |
|
|
|