"""async SQLAlchemy 引擎与会话。""" from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase from .config import settings class Base(DeclarativeBase): """所有 ORM 模型的基类。""" # echo=False;远程 PG 的空闲连接可能被中间层断开,pre_ping + recycle 自动剔除死连接 # pool_size/max_overflow:preview 冷路径每请求开 2 个会话(2 波并发),Redis 故障时全请求变冷, # 默认 5+10 不够并发冷请求用(连接池满了只会排队,不会崩) engine = create_async_engine( settings.database_url, echo=False, future=True, pool_pre_ping=True, pool_recycle=1800, pool_size=10, max_overflow=20, ) async_session = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) async def get_session() -> AsyncSession: """FastAPI 依赖:提供一个事务会话。""" async with async_session() as session: yield session