fix:修复了环境变量中的数据库账户密码无法成功导入的错误。增加相关依赖python-dotenv>=1.0.0
This commit is contained in:
@@ -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", "")
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user