Files
drl_2/xuexiao/config.py
user9994793890 3468394c6c feat: 实现单价分离、班级转课、消课筛选和手动录入功能
Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 5260473
2026-05-29 10:40:41 +08:00

92 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
from sqlalchemy import create_engine
# 延迟创建 Doris 引擎,避免在导入时卡住
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
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()
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