"""数据库引擎、会话工厂、初始化。""" from sqlalchemy import event, create_engine from sqlalchemy.orm import DeclarativeBase, sessionmaker from app.config import settings class Base(DeclarativeBase): pass def _make_engine(): """创建 SQLite 引擎,启用 foreign_keys。""" engine = create_engine( settings.DATABASE_URL, echo=settings.APP_DEBUG, connect_args={"check_same_thread": False}, ) @event.listens_for(engine, "connect") def _set_sqlite_pragma(dbapi_connection, _connection_record): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") cursor.execute("PRAGMA journal_mode=WAL") cursor.close() return engine engine = _make_engine() SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False) def get_db(): """FastAPI 依赖注入:获取数据库会话。""" db = SessionLocal() try: yield db finally: db.close()