Files
InternalAuditInterprise/backend/app/db.py
T
2026-06-16 00:38:57 +08:00

41 lines
982 B
Python

"""数据库引擎与会话管理。"""
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