db.py 834 B

12345678910111213141516171819202122232425262728293031323334
  1. from contextlib import asynccontextmanager
  2. from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
  3. from sqlalchemy.orm import DeclarativeBase
  4. from sorawm.configs import SQLITE_PATH
  5. class Base(DeclarativeBase):
  6. pass
  7. DATABASE_URL = f"sqlite+aiosqlite:///{SQLITE_PATH}"
  8. engine = create_async_engine(DATABASE_URL, echo=False)
  9. async_session_maker = async_sessionmaker(
  10. engine, class_=AsyncSession, expire_on_commit=False
  11. )
  12. async def init_db():
  13. async with engine.begin() as conn:
  14. await conn.run_sync(Base.metadata.create_all)
  15. @asynccontextmanager
  16. async def get_session():
  17. async with async_session_maker() as session:
  18. try:
  19. yield session
  20. await session.commit()
  21. except Exception:
  22. await session.rollback()
  23. raise