""" 資料庫連線管理 """ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, Session from typing import Generator from app.core.config import settings # 延遲初始化避免模組導入時就連接資料庫 _engine = None _SessionLocal = None def get_engine(): """獲取資料庫引擎 (延遲初始化)""" global _engine if _engine is None: _engine = create_engine( settings.DATABASE_URL, echo=settings.DATABASE_ECHO, pool_pre_ping=True, pool_size=10, max_overflow=20, ) return _engine def get_session_local(): """獲取 Session 工廠 (延遲初始化)""" global _SessionLocal if _SessionLocal is None: _SessionLocal = sessionmaker( autocommit=False, autoflush=False, bind=get_engine(), ) return _SessionLocal # 向後兼容 engine = property(lambda self: get_engine()) SessionLocal = property(lambda self: get_session_local()) def get_db() -> Generator[Session, None, None]: """ 取得資料庫 Session 用於 FastAPI 依賴注入 """ db = get_session_local()() try: yield db finally: db.close()