from typing import AsyncGenerator from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker from sqlmodel import SQLModel from app.core.config import settings # Create Async Engine # check_same_thread=False is needed only for SQLite. connect_args = {"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {} engine = create_async_engine( settings.DATABASE_URL, echo=(settings.LOG_LEVEL == "DEBUG"), connect_args=connect_args, future=True ) async def init_db(): async with engine.begin() as conn: # await conn.run_sync(SQLModel.metadata.drop_all) await conn.run_sync(SQLModel.metadata.create_all) async def get_session() -> AsyncGenerator[AsyncSession, None]: async_session = sessionmaker( engine, class_=AsyncSession, expire_on_commit=False ) async with async_session() as session: yield session