| 123456789101112131415161718192021222324252627282930313233 |
- from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
- from sqlalchemy.orm import sessionmaker
- from app.models import Base
- from app.config import get_settings
- settings = get_settings()
- # Convert sqlite:/// to sqlite+aiosqlite:/// for async support
- db_url = settings.database_url.replace("sqlite://", "sqlite+aiosqlite://")
- # Create async engine
- engine = create_async_engine(db_url, echo=True)
- # Create async session factory
- async_session = async_sessionmaker(
- engine, class_=AsyncSession, expire_on_commit=False
- )
- async def init_db():
- """Initialize database tables."""
- async with engine.begin() as conn:
- await conn.run_sync(Base.metadata.create_all)
- async def get_db():
- """Dependency for getting database session."""
- async with async_session() as session:
- try:
- yield session
- finally:
- await session.close()
|