"""SQLAlchemy engine / Session 工厂与 FastAPI 依赖。 注意:本文件属于 Infrastructure 层,是唯一允许出现 engine 创建的地方之一。 业务 Service / Domain 禁止直接使用 Session —— 一律通过 Repository。 """ from __future__ import annotations from collections.abc import Generator from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.core.config import get_settings _settings = get_settings() engine = create_engine( _settings.database_url, echo=_settings.sqlalchemy_echo, future=True, ) SessionLocal = sessionmaker( bind=engine, autoflush=False, expire_on_commit=False, class_=Session, ) def get_session() -> Generator[Session, None, None]: """FastAPI 依赖:每个请求一个 Session,请求结束自动关闭。 供 Repository 实现内部使用;业务层通过 Repository 间接访问。 """ with SessionLocal() as session: yield session