From 639d9eb510ba5836c9af14ab1e9bf7b8fe670ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Tue, 13 Jan 2026 18:47:18 +0800 Subject: [PATCH] a --- QUICK_START.md | 6 +++++- backend/README.md | 22 +++++++++++++++++++++- backend/api/main.py | 18 ++++++++++++++++++ backend/config_manager.py | 20 ++++++++++++++++++++ backend/database/connection.py | 34 ++++++++++++++++++++++++++++++++++ backend/init_config.py | 23 ++++++++++++++++++++--- backend/requirements.txt | 3 +++ 7 files changed, 121 insertions(+), 5 deletions(-) diff --git a/QUICK_START.md b/QUICK_START.md index e42e339..7984250 100644 --- a/QUICK_START.md +++ b/QUICK_START.md @@ -28,7 +28,11 @@ cd backend # 安装依赖 pip install -r requirements.txt -# 设置环境变量 +# 配置数据库(方式1:使用.env文件,推荐) +cp .env.example .env +# 编辑 .env 文件,设置数据库连接信息 + +# 或方式2:使用环境变量 export DB_HOST=localhost export DB_PORT=3306 export DB_USER=root diff --git a/backend/README.md b/backend/README.md index 8ce4156..2bdfbf7 100644 --- a/backend/README.md +++ b/backend/README.md @@ -18,7 +18,24 @@ pip install -r requirements.txt ## 数据库配置 -设置环境变量: +### 方式1:使用.env文件(推荐) + +在 `backend/` 目录或项目根目录创建 `.env` 文件: + +```bash +# 复制示例文件 +cp .env.example .env + +# 编辑.env文件 +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD=your_password +DB_NAME=auto_trade_sys +CORS_ORIGINS=http://localhost:3000,http://localhost:5173 +``` + +### 方式2:使用环境变量 ```bash export DB_HOST=localhost @@ -26,8 +43,11 @@ export DB_PORT=3306 export DB_USER=root export DB_PASSWORD=your_password export DB_NAME=auto_trade_sys +export CORS_ORIGINS=http://localhost:3000,http://localhost:5173 ``` +**注意**:系统会优先从 `.env` 文件读取配置,然后才是环境变量。 + ## 初始化数据库 ```bash diff --git a/backend/api/main.py b/backend/api/main.py index 707a2c5..fa4c16a 100644 --- a/backend/api/main.py +++ b/backend/api/main.py @@ -5,6 +5,24 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from api.routes import config, trades, stats, dashboard import os +from pathlib import Path + +# 加载.env文件 +try: + from dotenv import load_dotenv + backend_dir = Path(__file__).parent.parent + project_root = backend_dir.parent + env_file = backend_dir / '.env' + if not env_file.exists(): + env_file = project_root / '.env' + if env_file.exists(): + load_dotenv(env_file) + else: + load_dotenv(project_root / '.env', override=False) +except ImportError: + pass +except Exception: + pass app = FastAPI( title="Auto Trade System API", diff --git a/backend/config_manager.py b/backend/config_manager.py index 6f732c1..82f46e9 100644 --- a/backend/config_manager.py +++ b/backend/config_manager.py @@ -5,6 +5,26 @@ import sys import os from pathlib import Path +# 加载.env文件 +try: + from dotenv import load_dotenv + backend_dir = Path(__file__).parent + project_root = backend_dir.parent + env_files = [ + backend_dir / '.env', + project_root / '.env', + ] + for env_file in env_files: + if env_file.exists(): + load_dotenv(env_file, override=True) + break + else: + load_dotenv(project_root / '.env', override=False) +except ImportError: + pass +except Exception: + pass + # 添加项目根目录到路径 project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) diff --git a/backend/database/connection.py b/backend/database/connection.py index d9f4c4a..2e7abbe 100644 --- a/backend/database/connection.py +++ b/backend/database/connection.py @@ -5,9 +5,40 @@ import pymysql from contextlib import contextmanager import os import logging +from pathlib import Path logger = logging.getLogger(__name__) +# 尝试加载.env文件 +try: + from dotenv import load_dotenv + # 从backend目录或项目根目录查找.env文件 + backend_dir = Path(__file__).parent.parent + project_root = backend_dir.parent + + # 按优先级查找.env文件 + env_files = [ + backend_dir / '.env', # backend/.env (优先) + project_root / '.env', # 项目根目录/.env + ] + + loaded = False + for env_file in env_files: + if env_file.exists(): + load_dotenv(env_file, override=True) + logger.info(f"已加载环境变量文件: {env_file}") + loaded = True + break + + if not loaded: + # 如果都不存在,尝试自动查找(不报错) + load_dotenv(project_root / '.env', override=False) +except ImportError: + # 如果没有安装python-dotenv,跳过 + logger.debug("python-dotenv未安装,跳过.env文件加载") +except Exception as e: + logger.warning(f"加载.env文件失败: {e}") + class Database: """数据库连接类""" @@ -18,6 +49,9 @@ class Database: self.user = os.getenv('DB_USER', 'root') self.password = os.getenv('DB_PASSWORD', '') self.database = os.getenv('DB_NAME', 'auto_trade_sys') + + # 记录配置信息(不显示密码) + logger.debug(f"数据库配置: host={self.host}, port={self.port}, user={self.user}, database={self.database}") @contextmanager def get_connection(self): diff --git a/backend/init_config.py b/backend/init_config.py index a1c5ecb..9d705e1 100644 --- a/backend/init_config.py +++ b/backend/init_config.py @@ -4,12 +4,29 @@ import sys from pathlib import Path -# 添加项目根目录 +# 添加项目根目录和trading_system目录 project_root = Path(__file__).parent.parent -sys.path.insert(0, str(project_root)) +trading_system_path = project_root / 'trading_system' +# 确保trading_system在路径中 +if str(trading_system_path) not in sys.path: + sys.path.insert(0, str(trading_system_path)) + +# 确保backend在路径中(用于导入database模块) +backend_path = Path(__file__).parent +if str(backend_path) not in sys.path: + sys.path.insert(0, str(backend_path)) + +# 导入数据库模型 from database.models import TradingConfig -import config + +# 导入交易系统配置(现在在trading_system目录下) +try: + import config +except ImportError: + # 如果直接导入失败,尝试从trading_system导入 + sys.path.insert(0, str(trading_system_path)) + import config def init_configs(): """将config.py中的配置初始化到数据库""" diff --git a/backend/requirements.txt b/backend/requirements.txt index 5e335e3..9fe0b58 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -8,6 +8,9 @@ python-multipart==0.0.6 pymysql==1.1.0 sqlalchemy==2.0.23 +# 环境变量管理 +python-dotenv==1.0.0 + # 交易系统依赖(如果需要) python-binance==1.0.19 websocket-client==1.6.1