"""数据库引擎与会话管理。""" from __future__ import annotations from collections.abc import Iterator from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Session, sessionmaker from app.config import get_settings class Base(DeclarativeBase): """所有 ORM 模型的基类。""" _engine = None _SessionLocal: sessionmaker[Session] | None = None def get_engine(): global _engine if _engine is None: settings = get_settings() _engine = create_engine(settings.database_url, pool_pre_ping=True, future=True) return _engine def get_sessionmaker() -> sessionmaker[Session]: global _SessionLocal if _SessionLocal is None: _SessionLocal = sessionmaker(bind=get_engine(), expire_on_commit=False) return _SessionLocal def get_session() -> Iterator[Session]: """FastAPI 依赖注入用的会话生成器。""" sm = get_sessionmaker() with sm() as session: yield session