"""异步数据库引擎 + 会话。 - engine / SessionLocal:全局单例 - get_session:FastAPI 依赖,按请求注入一个会话 - init_db:启动时建表(MVP 用 create_all;表结构稳定后切 alembic 迁移,对齐 dograh) """ from collections.abc import AsyncGenerator import config from db.models import Base from sqlalchemy.ext.asyncio import ( AsyncSession, async_sessionmaker, create_async_engine, ) engine = create_async_engine(config.DATABASE_URL, echo=False, pool_pre_ping=True) SessionLocal = async_sessionmaker(engine, expire_on_commit=False) async def get_session() -> AsyncGenerator[AsyncSession, None]: async with SessionLocal() as session: yield session async def init_db() -> None: async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all)