from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession from sqlalchemy.orm import declarative_base from packages.core.config import settings # 创建异步数据库引擎 engine_kwargs = { "echo": False, "future": True, } if not settings.DATABASE_URL.startswith("sqlite"): engine_kwargs["pool_size"] = 20 engine_kwargs["max_overflow"] = 10 engine = create_async_engine( settings.DATABASE_URL, **engine_kwargs ) # 创建异步 Session 工厂 AsyncSessionLocal = async_sessionmaker( bind=engine, class_=AsyncSession, expire_on_commit=False, autoflush=False ) # ORM 基类 Base = declarative_base() # 数据库会话依赖注入函数 async def get_db_session(): async with AsyncSessionLocal() as session: try: yield session finally: await session.close() async def get_db(): async with AsyncSessionLocal() as session: try: yield session finally: await session.close()