Files
drl_2/xuexiao/config.py

92 lines
3.7 KiB
Python
Raw Normal View History

2026-05-29 10:28:07 +08:00
import os
from sqlalchemy import create_engine
# 延迟创建 Doris 引擎,避免在导入时卡住
2026-05-29 10:28:07 +08:00
LOCAL_DB_URL = "mysql+pymysql://root:DsideaL147258369@192.168.10.250:9030/yltcharge?charset=utf8mb4"
write_engine = None
local_engine = None
def _get_write_engine():
"""获取 write_engine如果不存在则创建延迟初始化"""
global write_engine, local_engine
if write_engine is None:
try:
write_engine = create_engine(
LOCAL_DB_URL,
pool_recycle=3600,
pool_pre_ping=True,
connect_args={'connect_timeout': 2, 'read_timeout': 5, 'write_timeout': 5}
)
local_engine = write_engine
except Exception:
write_engine = None
local_engine = None
return write_engine
2026-05-29 10:28:07 +08:00
class Config:
"""应用配置"""
SECRET_KEY = os.environ.get('SECRET_KEY', 'student-course-mgmt-secret-key-2024')
# 数据库配置:支持 MySQL / Aliyun RDS MySQL / SQLite
#
# 方式1 - 自建MySQL:
# DB_TYPE=mysql, MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB
#
# 方式2 - 阿里云RDS MySQL:
# DB_TYPE=aliyun_mysql
# ALIYUN_MYSQL_HOST (必填RDS内网/外网地址,如 rm-xxxxx.mysql.rds.aliyuncs.com)
# ALIYUN_MYSQL_PORT (默认3306)
# ALIYUN_MYSQL_USER (默认root)
# ALIYUN_MYSQL_PASSWORD (必填)
# ALIYUN_MYSQL_DB (默认student_course)
# ALIYUN_MYSQL_SSL (可选设为1启用SSL连接)
#
# 不设置则默认使用 SQLite开发环境
DB_TYPE = os.environ.get('DB_TYPE', 'sqlite').lower()
2026-05-29 10:28:07 +08:00
if DB_TYPE == 'mysql':
SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI', LOCAL_DB_URL)
SQLALCHEMY_ENGINE_OPTIONS = {
'pool_recycle': 3600,
'pool_pre_ping': True,
}
elif DB_TYPE == 'aliyun_mysql':
ALIYUN_MYSQL_HOST = os.environ.get('ALIYUN_MYSQL_HOST', 'rm-xxxxx.mysql.rds.aliyuncs.com')
ALIYUN_MYSQL_PORT = os.environ.get('ALIYUN_MYSQL_PORT', '3306')
ALIYUN_MYSQL_USER = os.environ.get('ALIYUN_MYSQL_USER', 'root')
ALIYUN_MYSQL_PASSWORD = os.environ.get('ALIYUN_MYSQL_PASSWORD', '')
ALIYUN_MYSQL_DB = os.environ.get('ALIYUN_MYSQL_DB', 'student_course')
ALIYUN_MYSQL_SSL = os.environ.get('ALIYUN_MYSQL_SSL', '0')
# 构建连接URI阿里云RDS强制utf8mb4
_ssl_param = '&ssl=true&ssl_ca=/etc/ssl/certs/ca-certificates.crt' if ALIYUN_MYSQL_SSL == '1' else ''
SQLALCHEMY_DATABASE_URI = (
f'mysql+pymysql://{ALIYUN_MYSQL_USER}:{ALIYUN_MYSQL_PASSWORD}'
f'@{ALIYUN_MYSQL_HOST}:{ALIYUN_MYSQL_PORT}/{ALIYUN_MYSQL_DB}'
f'?charset=utf8mb4{_ssl_param}'
)
# 阿里云RDS推荐连接池参数长连接 + 自动重连 + 超时回收
SQLALCHEMY_ENGINE_OPTIONS = {
'pool_pre_ping': True, # 每次取连接前检测存活避免RDS主动断连后报错
'pool_recycle': 1800, # RDS默认wait_timeout=28800设1800秒回收更安全
'pool_size': 10, # 常驻连接数
'max_overflow': 20, # 峰值额外连接
'pool_timeout': 30, # 获取连接超时(秒)
'connect_args': {
'connect_timeout': 10, # 建立TCP连接超时(秒)
'read_timeout': 30, # 读超时(秒)
'write_timeout': 30, # 写超时(秒)
},
}
else:
SQLALCHEMY_DATABASE_URI = 'sqlite:///student_course.db'
SQLALCHEMY_ENGINE_OPTIONS = {
'pool_pre_ping': True,
}
SQLALCHEMY_TRACK_MODIFICATIONS = False