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

4.7 KiB
Raw Permalink Blame History

股票监控系统数据库迁移指南

本指南将帮助您将股票监控系统从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 中检查数据库配置:

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

该脚本提供以下选项:

  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 - 添加数据库配置

使用说明

启动系统

迁移完成后,正常启动系统即可:

uvicorn app.main:app --reload

验证迁移

  1. 检查监控列表是否完整迁移
  2. 验证股票数据是否正确加载
  3. 确认AI分析功能正常工作
  4. 测试新增和删除功能

功能对比

功能 迁移前 迁移后
监控列表 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;

性能优化

  1. 定期清理过期的股票数据
  2. 监控数据库连接池
  3. 优化查询索引

回滚方案

如果需要回滚到JSON文件存储

  1. 恢复备份的JSON文件
  2. 修改 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语句删除特定数据。

技术支持

如果遇到迁移问题,请检查:

  1. MySQL服务状态
  2. 数据库权限设置
  3. 网络连接
  4. 日志文件中的错误信息

迁移完成后,您的股票监控系统将具备更好的性能、可靠性和扩展性!