"""MySQL 业务库数据源(同步)""" from typing import Optional from sqlalchemy import Engine, create_engine from sqlalchemy.orm import DeclarativeBase, Session, sessionmaker from app.config import settings from app.core.logger import log # ──────────── 内部变量 ──────────── _mysql_engine: Optional[Engine] = None _mysql_session_factory: Optional[sessionmaker[Session]] = None class MysqlBase(DeclarativeBase): """MySQL ORM 声明基类""" pass def init_db() -> None: """初始化 MySQL 数据源""" global _mysql_engine, _mysql_session_factory _mysql_engine = create_engine( settings.mysql_url, pool_size=settings.mysql_pool_size, max_overflow=settings.mysql_max_overflow, pool_timeout=settings.db_pool_timeout, pool_recycle=3600, pool_pre_ping=True, echo=False, ) _mysql_session_factory = sessionmaker(_mysql_engine, expire_on_commit=False) log.info("MySQL 数据源初始化完成: {}", settings.db_host) def close_db() -> None: """关闭 MySQL 数据源""" if _mysql_engine: _mysql_engine.dispose() log.info("MySQL 数据源已关闭") def MysqlSession() -> Session: """获取 MySQL 会话(用作 with MysqlSession() as session)""" if _mysql_session_factory is None: raise RuntimeError("数据库未初始化,请先调用 init_db()") return _mysql_session_factory()