""" 量化数据库配置文件 敏感信息(数据库密码、API Token)通过环境变量管理: - QUANT_DB_PASSWORD : 数据库密码 - TUSHARE_TOKEN : Tushare API Token 设置方式: Windows: set QUANT_DB_PASSWORD=your_password && set TUSHARE_TOKEN=your_token Linux: export QUANT_DB_PASSWORD=your_password && export TUSHARE_TOKEN=your_token 也可创建 .env 文件(参考 .env.example) """ import os from pathlib import Path from urllib.parse import quote_plus # 加载 .env 文件中的环境变量 _LOADED = False try: from dotenv import load_dotenv # 使用 resolve() 获取绝对路径,避免 os.chdir() 改变工作目录后 __file__ 变为相对路径 env_path = Path(__file__).resolve().parent / ".env" # 如果 resolve 后的路径不存在,尝试从当前文件所在目录查找 if not env_path.exists(): # 备用方案:也检查 Notebook 的当前工作目录 cwd_path = Path.cwd() / ".env" if cwd_path.exists(): env_path = cwd_path if env_path.exists(): load_dotenv(dotenv_path=env_path, override=False) print(f"✓ 已加载环境变量文件: {env_path}") _LOADED = True else: print(f"⚠ 未找到 .env 文件。检查路径: {Path(__file__).resolve().parent / '.env'}, 当前目录: {Path.cwd() / '.env'}") except ImportError: print("⚠ python-dotenv 未安装,无法自动加载 .env 文件。请手动设置环境变量或执行: pip install python-dotenv") # PostgreSQL Docker 连接配置 _PASSWORD = os.environ.get("QUANT_DB_PASSWORD", "") DB_CONFIG = { "host": os.environ.get("QUANT_DB_HOST", "192.168.27.11"), "port": int(os.environ.get("QUANT_DB_PORT", "5438")), "database": os.environ.get("QUANT_DB_NAME", "quant_db"), "user": os.environ.get("QUANT_DB_USER", "postgres"), "password": _PASSWORD, } # 对密码进行 URL 编码(用于 SQLAlchemy 连接串),避免特殊字符导致解析错误 PASSWORD_ENCODED = quote_plus(_PASSWORD) if _PASSWORD else "" # Tushare API Token TUSHARE_TOKEN = os.environ.get("TUSHARE_TOKEN", "") # ---- 启动期强校验:关键凭证未设置时直接报错,避免失败点后置 ---- if not _PASSWORD: raise ValueError( "QUANT_DB_PASSWORD 环境变量未设置。" "请设置环境变量或创建 .env 文件(参考 .env.example)。\n" " Windows: set QUANT_DB_PASSWORD=your_password\n" " Linux: export QUANT_DB_PASSWORD=your_password" ) _TUSHARE = os.environ.get("TUSHARE_TOKEN", "") if not _TUSHARE: raise ValueError( "TUSHARE_TOKEN 环境变量未设置。" "请设置环境变量或创建 .env 文件(参考 .env.example)。\n" " Windows: set TUSHARE_TOKEN=your_token\n" " Linux: export TUSHARE_TOKEN=your_token\n" " 注册地址: https://tushare.pro" ) # 批量导入参数 BATCH_SIZE = int(os.environ.get("QUANT_BATCH_SIZE", "5000")) # 每批次插入行数 START_DATE = os.environ.get("QUANT_START_DATE", "2010-01-01") # 数据起始日期 END_DATE = os.environ.get("QUANT_END_DATE", "2025-12-31") # 数据结束日期