|
|
|
|
"""
|
|
|
|
|
数据缓冲平台 - MySQL 数据库连接
|
|
|
|
|
"""
|
|
|
|
|
import logging
|
|
|
|
|
import urllib.parse
|
|
|
|
|
from sqlalchemy import create_engine, text
|
|
|
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
|
from app.config import MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
mysql_engine = None
|
|
|
|
|
MySQLSessionLocal = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def init_mysql():
|
|
|
|
|
"""初始化 MySQL 连接引擎,失败时返回 None"""
|
|
|
|
|
global mysql_engine, MySQLSessionLocal
|
|
|
|
|
try:
|
|
|
|
|
encoded_password = urllib.parse.quote_plus(MYSQL_PASSWORD)
|
|
|
|
|
url = f"mysql+pymysql://{MYSQL_USER}:{encoded_password}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4"
|
|
|
|
|
mysql_engine = create_engine(url, pool_pre_ping=True, pool_recycle=3600)
|
|
|
|
|
with mysql_engine.connect() as conn:
|
|
|
|
|
conn.execute(text("SELECT 1"))
|
|
|
|
|
MySQLSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=mysql_engine)
|
|
|
|
|
logger.info("MySQL 连接初始化成功")
|
|
|
|
|
return mysql_engine
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.warning(f"MySQL 初始化失败: {e}")
|
|
|
|
|
mysql_engine = None
|
|
|
|
|
MySQLSessionLocal = None
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_mysql_session():
|
|
|
|
|
"""获取 MySQL 会话"""
|
|
|
|
|
if MySQLSessionLocal is None:
|
|
|
|
|
raise RuntimeError("MySQL 未初始化")
|
|
|
|
|
return MySQLSessionLocal()
|