| 12345678910111213141516171819202122232425262728293031323334 |
- from contextlib import asynccontextmanager
- from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
- from sqlalchemy.orm import DeclarativeBase
- from sorawm.configs import SQLITE_PATH
- class Base(DeclarativeBase):
- pass
- DATABASE_URL = f"sqlite+aiosqlite:///{SQLITE_PATH}"
- engine = create_async_engine(DATABASE_URL, echo=False)
- async_session_maker = async_sessionmaker(
- engine, class_=AsyncSession, expire_on_commit=False
- )
- async def init_db():
- async with engine.begin() as conn:
- await conn.run_sync(Base.metadata.create_all)
- @asynccontextmanager
- async def get_session():
- async with async_session_maker() as session:
- try:
- yield session
- await session.commit()
- except Exception:
- await session.rollback()
- raise
|