- 重构数据访问层:引入DAO模式,支持MySQL/SQLite双数据库 - 新增数据库架构:完整的股票数据、AI分析、自选股管理表结构 - 升级AI分析服务:集成豆包大模型,支持多维度分析 - 优化API路由:分离市场数据API,提供更清晰的接口设计 - 完善项目文档:添加数据库迁移指南、新功能指南等 - 清理冗余文件:删除旧的缓存文件和无用配置 - 新增调度器:支持定时任务和数据自动更新 - 改进前端模板:简化的股票展示页面 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.7 KiB
4.7 KiB
股票监控系统数据库迁移指南
本指南将帮助您将股票监控系统从JSON文件存储迁移到MySQL数据库存储。
迁移概述
迁移前状态
- 监控列表:存储在
config.json文件 - 股票缓存:存储在
stock_cache.json文件 - AI分析结果:存储在各个目录的JSON文件中
迁移后状态
- 所有数据统一存储在
stock_monitorMySQL数据库中 - 支持数据查询、历史记录、缓存管理
- 更好的性能和数据一致性
数据库结构
主要数据表
- stocks - 股票基础信息表
- stock_data - 股票实时数据表
- watchlist - 监控列表表
- ai_analysis - AI分析结果表
- system_config - 系统配置表
- data_update_log - 数据更新日志表
详细的表结构请参考 database_schema.sql 文件。
迁移步骤
1. 准备数据库环境
确保MySQL服务已启动,并且数据库连接配置正确。
在 app/config.py 中检查数据库配置:
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. 初始化数据库
运行数据库初始化脚本:
python init_database.py
该脚本将:
- 创建
stock_monitor数据库 - 创建所有必要的数据表
- 插入系统默认配置
- 测试数据库连接
3. 执行数据迁移
运行数据迁移脚本:
python migrate_to_database.py
该脚本提供以下选项:
- 执行完整迁移
- 仅迁移监控列表
- 仅迁移股票缓存
- 仅迁移AI分析
- 验证迁移结果
建议选择选项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- 添加数据库配置
使用说明
启动系统
迁移完成后,正常启动系统即可:
uvicorn app.main:app --reload
验证迁移
- 检查监控列表是否完整迁移
- 验证股票数据是否正确加载
- 确认AI分析功能正常工作
- 测试新增和删除功能
功能对比
| 功能 | 迁移前 | 迁移后 |
|---|---|---|
| 监控列表 | JSON文件 | 数据库表 |
| 股票数据缓存 | JSON文件 | 数据库表 |
| AI分析结果 | 文件缓存 | 数据库表 |
| 历史记录 | 无 | 支持 |
| 数据查询 | 文件解析 | SQL查询 |
| 性能 | 文件I/O | 数据库优化 |
| 数据备份 | 手动 | 数据库工具 |
维护说明
数据备份
定期备份数据库:
mysqldump -u root -p stock_monitor > backup_$(date +%Y%m%d).sql
日志监控
查看 data_update_log 表了解数据更新状态:
SELECT * FROM data_update_log
WHERE update_status = 'failed'
ORDER BY created_at DESC;
性能优化
- 定期清理过期的股票数据
- 监控数据库连接池
- 优化查询索引
回滚方案
如果需要回滚到JSON文件存储:
- 恢复备份的JSON文件
- 修改
app/api/stock_routes.py中的导入:# 注释掉数据库服务 # 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语句删除特定数据。
技术支持
如果遇到迁移问题,请检查:
- MySQL服务状态
- 数据库权限设置
- 网络连接
- 日志文件中的错误信息
迁移完成后,您的股票监控系统将具备更好的性能、可靠性和扩展性!