| from typing import AsyncGenerator |
| from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession |
|
|
| from app.core.config import settings |
|
|
| |
| |
| |
| engine = create_async_engine( |
| str(settings.SQLALCHEMY_DATABASE_URI), |
| echo=settings.DB_ECHO, |
| future=True, |
| |
| connect_args={"check_same_thread": False} |
| ) |
|
|
| |
| |
| |
| |
| |
| async_session_factory = async_sessionmaker( |
| bind=engine, |
| class_=AsyncSession, |
| expire_on_commit=False, |
| autocommit=False, |
| autoflush=False, |
| ) |
|
|
| |
| |
| |
| async def get_db() -> AsyncGenerator[AsyncSession, None]: |
| """ |
| Dependency for FastAPI routes. |
| Usage: db: AsyncSession = Depends(get_db) |
| """ |
| async with async_session_factory() as session: |
| try: |
| yield session |
| await session.commit() |
| except Exception: |
| await session.rollback() |
| raise |
| finally: |
| await session.close() |
|
|