fix:修复了环境变量中的数据库账户密码无法成功导入的错误。增加相关依赖python-dotenv>=1.0.0

This commit is contained in:
2026-07-31 22:13:16 +08:00
parent 94c8305d9c
commit 7612bae51e
3 changed files with 25 additions and 5 deletions
+20 -1
View File
@@ -11,16 +11,35 @@
也可创建 .env 文件(参考 .env.example 也可创建 .env 文件(参考 .env.example
""" """
import os import os
from pathlib import Path
from urllib.parse import quote_plus
# 加载 .env 文件中的环境变量
try:
from dotenv import load_dotenv
env_path = Path(__file__).parent / ".env"
if env_path.exists():
load_dotenv(dotenv_path=env_path, override=True)
print(f"✓ 已加载环境变量文件: {env_path}")
else:
print(f"⚠ 未找到 .env 文件: {env_path}")
except ImportError:
print("⚠ python-dotenv 未安装,无法自动加载 .env 文件。请手动设置环境变量或执行: pip install python-dotenv")
# PostgreSQL Docker 连接配置 # PostgreSQL Docker 连接配置
_PASSWORD = os.environ.get("QUANT_DB_PASSWORD", "")
DB_CONFIG = { DB_CONFIG = {
"host": os.environ.get("QUANT_DB_HOST", "192.168.27.11"), "host": os.environ.get("QUANT_DB_HOST", "192.168.27.11"),
"port": int(os.environ.get("QUANT_DB_PORT", "5438")), "port": int(os.environ.get("QUANT_DB_PORT", "5438")),
"database": os.environ.get("QUANT_DB_NAME", "quant_db"), "database": os.environ.get("QUANT_DB_NAME", "quant_db"),
"user": os.environ.get("QUANT_DB_USER", "postgres"), "user": os.environ.get("QUANT_DB_USER", "postgres"),
"password": os.environ.get("QUANT_DB_PASSWORD", ""), "password": _PASSWORD,
} }
# 对密码进行 URL 编码(用于 SQLAlchemy 连接串),避免特殊字符导致解析错误
PASSWORD_ENCODED = quote_plus(_PASSWORD) if _PASSWORD else ""
# Tushare API Token # Tushare API Token
TUSHARE_TOKEN = os.environ.get("TUSHARE_TOKEN", "") TUSHARE_TOKEN = os.environ.get("TUSHARE_TOKEN", "")
+2 -2
View File
@@ -15,7 +15,7 @@ from psycopg2 import sql
from psycopg2.extras import execute_values from psycopg2.extras import execute_values
from sqlalchemy import create_engine from sqlalchemy import create_engine
from config import DB_CONFIG, TUSHARE_TOKEN, BATCH_SIZE, START_DATE, END_DATE from config import DB_CONFIG, TUSHARE_TOKEN, BATCH_SIZE, START_DATE, END_DATE, PASSWORD_ENCODED
# ============================================================ # ============================================================
# 日志配置 # 日志配置
@@ -55,7 +55,7 @@ def get_sqlalchemy_engine():
global _sqlalchemy_engine global _sqlalchemy_engine
if _sqlalchemy_engine is None: if _sqlalchemy_engine is None:
db_url = ( db_url = (
f"postgresql://{DB_CONFIG['user']}:{DB_CONFIG['password']}" f"postgresql://{DB_CONFIG['user']}:{PASSWORD_ENCODED}"
f"@{DB_CONFIG['host']}:{DB_CONFIG['port']}/{DB_CONFIG['database']}" f"@{DB_CONFIG['host']}:{DB_CONFIG['port']}/{DB_CONFIG['database']}"
) )
_sqlalchemy_engine = create_engine(db_url, pool_size=5, max_overflow=10) _sqlalchemy_engine = create_engine(db_url, pool_size=5, max_overflow=10)
+1
View File
@@ -2,3 +2,4 @@ tushare>=1.4.0
pandas>=1.5.0 pandas>=1.5.0
psycopg2-binary>=2.9.0 psycopg2-binary>=2.9.0
sqlalchemy>=2.0.0 sqlalchemy>=2.0.0
python-dotenv>=1.0.0