60 lines
2.3 KiB
Python
60 lines
2.3 KiB
Python
"""
|
||
量化数据库配置文件
|
||
|
||
敏感信息(数据库密码、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=True)
|
||
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", "")
|
||
|
||
# 批量导入参数
|
||
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") # 数据结束日期
|