stock-monitor/docs/guides/DATABASE_MIGRATION_GUIDE.md
ycg 569c1c8813 重构股票监控系统:数据库架构升级与功能完善
- 重构数据访问层:引入DAO模式,支持MySQL/SQLite双数据库
- 新增数据库架构:完整的股票数据、AI分析、自选股管理表结构
- 升级AI分析服务:集成豆包大模型,支持多维度分析
- 优化API路由:分离市场数据API,提供更清晰的接口设计
- 完善项目文档:添加数据库迁移指南、新功能指南等
- 清理冗余文件:删除旧的缓存文件和无用配置
- 新增调度器:支持定时任务和数据自动更新
- 改进前端模板:简化的股票展示页面

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 15:44:25 +08:00

182 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 股票监控系统数据库迁移指南
本指南将帮助您将股票监控系统从JSON文件存储迁移到MySQL数据库存储。
## 迁移概述
### 迁移前状态
- 监控列表:存储在 `config.json` 文件
- 股票缓存:存储在 `stock_cache.json` 文件
- AI分析结果存储在各个目录的JSON文件中
### 迁移后状态
- 所有数据统一存储在 `stock_monitor` MySQL数据库中
- 支持数据查询、历史记录、缓存管理
- 更好的性能和数据一致性
## 数据库结构
### 主要数据表
1. **stocks** - 股票基础信息表
2. **stock_data** - 股票实时数据表
3. **watchlist** - 监控列表表
4. **ai_analysis** - AI分析结果表
5. **system_config** - 系统配置表
6. **data_update_log** - 数据更新日志表
详细的表结构请参考 `database_schema.sql` 文件。
## 迁移步骤
### 1. 准备数据库环境
确保MySQL服务已启动并且数据库连接配置正确。
`app/config.py` 中检查数据库配置:
```python
MYSQL_HOST = os.getenv('MYSQL_HOST', 'localhost')
MYSQL_PORT = int(os.getenv('MYSQL_PORT', 3306))
MYSQL_USER = os.getenv('MYSQL_USER', 'root')
MYSQL_PASSWORD = os.getenv('MYSQL_PASSWORD', 'password')
MYSQL_DATABASE = os.getenv('MYSQL_DATABASE', 'stock_monitor')
```
### 2. 初始化数据库
运行数据库初始化脚本:
```bash
python init_database.py
```
该脚本将:
- 创建 `stock_monitor` 数据库
- 创建所有必要的数据表
- 插入系统默认配置
- 测试数据库连接
### 3. 执行数据迁移
运行数据迁移脚本:
```bash
python migrate_to_database.py
```
该脚本提供以下选项:
1. 执行完整迁移
2. 仅迁移监控列表
3. 仅迁移股票缓存
4. 仅迁移AI分析
5. 验证迁移结果
建议选择选项1执行完整迁移。
### 4. 备份原始数据
迁移脚本会自动创建原始JSON文件的备份备份位置格式为
```
json_backup_YYYYMMDD_HHMMSS/
```
## 系统更改
### 新增文件
- `app/database.py` - 数据库连接管理
- `app/dao/` - 数据访问对象层
- `app/services/stock_service_db.py` - 基于数据库的股票服务
- `app/services/ai_analysis_service_db.py` - 基于数据库的AI分析服务
- `init_database.py` - 数据库初始化脚本
- `migrate_to_database.py` - 数据迁移脚本
### 修改文件
- `app/api/stock_routes.py` - 更新为使用数据库服务
- `app/config.py` - 添加数据库配置
## 使用说明
### 启动系统
迁移完成后,正常启动系统即可:
```bash
uvicorn app.main:app --reload
```
### 验证迁移
1. 检查监控列表是否完整迁移
2. 验证股票数据是否正确加载
3. 确认AI分析功能正常工作
4. 测试新增和删除功能
### 功能对比
| 功能 | 迁移前 | 迁移后 |
|------|--------|--------|
| 监控列表 | JSON文件 | 数据库表 |
| 股票数据缓存 | JSON文件 | 数据库表 |
| AI分析结果 | 文件缓存 | 数据库表 |
| 历史记录 | 无 | 支持 |
| 数据查询 | 文件解析 | SQL查询 |
| 性能 | 文件I/O | 数据库优化 |
| 数据备份 | 手动 | 数据库工具 |
## 维护说明
### 数据备份
定期备份数据库:
```bash
mysqldump -u root -p stock_monitor > backup_$(date +%Y%m%d).sql
```
### 日志监控
查看 `data_update_log` 表了解数据更新状态:
```sql
SELECT * FROM data_update_log
WHERE update_status = 'failed'
ORDER BY created_at DESC;
```
### 性能优化
1. 定期清理过期的股票数据
2. 监控数据库连接池
3. 优化查询索引
## 回滚方案
如果需要回滚到JSON文件存储
1. 恢复备份的JSON文件
2. 修改 `app/api/stock_routes.py` 中的导入:
```python
# 注释掉数据库服务
# from app.services.stock_service_db import StockServiceDB
# from app.services.ai_analysis_service_db import AIAnalysisServiceDB
# 恢复原始服务
from app.services.stock_service import StockService
from app.services.ai_analysis_service import AIAnalysisService
```
## 常见问题
### Q: 迁移过程中断怎么办?
A: 迁移脚本支持断点续传,重新运行会跳过已迁移的数据。
### Q: 数据库连接失败怎么解决?
A: 检查MySQL服务是否启动连接配置是否正确防火墙设置是否允许连接。
### Q: 迁移后数据不一致怎么办?
A: 使用验证功能检查迁移结果,或者重新执行迁移覆盖现有数据。
### Q: 如何清理测试数据?
A: 可以清空数据库表重新迁移或者使用SQL语句删除特定数据。
## 技术支持
如果遇到迁移问题,请检查:
1. MySQL服务状态
2. 数据库权限设置
3. 网络连接
4. 日志文件中的错误信息
---
**迁移完成后,您的股票监控系统将具备更好的性能、可靠性和扩展性!**