Files
qlib/config.yaml
T
Simon 6c2f198261 feat(db): SQLite 全量迁移至 MySQL(config.yaml 配置化 + 迁移脚本 + 一致性校验)
- config.yaml database.mysql:host/port/db/user/charset 明文可提交;密码经 password_env
  引用 .env 的 MYSQL_PASSWORD(AGENT.md §33 密钥不进 git)
- config.py _build_mysql_url:URL 优先级 DATABASE_URL env > database.mysql 段 > sqlite 兜底
- pyproject 引入 pymysql>=1.1
- tests/conftest.py 强制每进程 /tmp SQLite(测试绝不触 MySQL 开发库);test_config 覆盖
  mysql 组装/密码可选/sqlite 兜底分支
- scripts/migrate_sqlite_to_mysql.py:sqlite→mysql 一次性迁移工具(keyset 分页 + chunk
  多值 INSERT + 攒批 commit + 幂等续传 + 低配 MySQL 节流 --throttle-sec + --verify-only
  行数与抽样一致性校验);已用于 data/quant.db 约 1605 万行迁移并经校验一致
2026-09-08 23:58:48 +08:00

76 lines
2.7 KiB
YAML
Raw 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.
# ============================================================
# 全局可配置项(可提交,不含任何密钥)
# 约定(见 AGENT.md §2 / §33):
# - 可配置项统一写入本文件(项目根 config.yaml)
# - 密钥统一放根目录 .env(见 .env.example),
# 本文件通过 *_env 字段引用对应环境变量名,不写明文
# ============================================================
app:
name: "qlib-platform"
version: "0.1.0"
debug: false
# 从 .env 读取应用密钥的环境变量名
secret_key_env: "APP_SECRET_KEY"
api:
prefix: "/api"
database:
# 数据库 URL 选择优先级:
# 1) 环境变量 database.url_env(如 DATABASE_URL,可在 .env 覆盖)
# 2) database.mysql(enabled: true 时由 host/port/db/user 组装 mysql+pymysql URL)
# 3) 兜底 sqlite:///./data/quant.db(相对路径自动解析到项目根 data/)
url_env: "DATABASE_URL"
echo: false
# Alembic 迁移脚本目录(相对 backend/)
migrations_dir: "app/infrastructure/persistence/migrations"
# ---- MySQL(当前默认库;2026-09 由 SQLite data/quant.db 全量迁移而来)----
# host/port/db/user 明文可提交;密码经 password_env 引用 .env 变量
# (AGENT.md §33:密钥只放根目录 .env,本文件不写明文密码)。
mysql:
enabled: true
host: "192.168.1.10"
port: 3306
db: "qlib"
user: "qlib"
password_env: "MYSQL_PASSWORD"
charset: "utf8mb4"
data_source:
primary: "tushare"
fallback: "sina"
tushare_token_env: "TUSHARE_TOKEN"
storage:
# 相对项目根目录
raw_dir: "data/raw"
normalized_dir: "data/normalized"
parquet_dir: "data/parquet"
qlib_dir: "data/qlib"
job:
# 研究任务执行模式:
# subprocess —— 独立子进程执行(内存隔离 + RLIMIT 上限,防研究任务 OOM 拖垮 API 服务)
# local —— 本进程内执行(开发 / 单测,无隔离)
# 可用环境变量 JOB_MODE 覆盖(测试强制 local)。
mode: "subprocess"
# subprocess 模式下子进程虚拟地址空间上限(GB);达到上限任务以 MemoryError 失败,不会 OOM 整机
max_memory_gb: 6
# 并发研究子进程上限(超出直接失败并提示稍后再试)
max_concurrent_jobs: 2
agent:
llm:
# 大模型接入:URL 与模型名在此配置(明文、可提交);
# 密钥只放根目录 .env(LLM_API_KEY,见 .env.example)——本文件不写任何 Key。
# 可选:仍可通过 .env 的 LLM_BASE_URL / LLM_MODEL 覆盖下面两个值。
base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
model: "qwen-plus"
base_url_env: "LLM_BASE_URL"
model_env: "LLM_MODEL"
api_key_env: "LLM_API_KEY"
logging:
level: "INFO"