database.py 917 B

123456789101112131415161718192021222324252627282930313233
  1. from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
  2. from sqlalchemy.orm import sessionmaker
  3. from app.models import Base
  4. from app.config import get_settings
  5. settings = get_settings()
  6. # Convert sqlite:/// to sqlite+aiosqlite:/// for async support
  7. db_url = settings.database_url.replace("sqlite://", "sqlite+aiosqlite://")
  8. # Create async engine
  9. engine = create_async_engine(db_url, echo=True)
  10. # Create async session factory
  11. async_session = async_sessionmaker(
  12. engine, class_=AsyncSession, expire_on_commit=False
  13. )
  14. async def init_db():
  15. """Initialize database tables."""
  16. async with engine.begin() as conn:
  17. await conn.run_sync(Base.metadata.create_all)
  18. async def get_db():
  19. """Dependency for getting database session."""
  20. async with async_session() as session:
  21. try:
  22. yield session
  23. finally:
  24. await session.close()