""" 验证K线数据更新结果 检查数据库中的K线数据是否成功保存 """ import sys import os import logging from sqlalchemy import func sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from src.storage.database import db_manager from src.storage.stock_repository import StockRepository # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) def verify_kline_data(): """ 验证K线数据更新结果 """ try: logger.info("开始验证K线数据更新结果...") # 创建存储库 repository = StockRepository(db_manager.get_session()) logger.info("存储库创建成功") # 检查股票基础信息表 stocks = repository.get_stock_basic_info() logger.info(f"股票基础信息表: {len(stocks)}条记录") if stocks: # 显示前5只股票 logger.info("前5只股票信息:") for i, stock in enumerate(stocks[:5]): logger.info(f" {i+1}. {stock.code} - {stock.name}") # 检查K线数据表 try: kline_count = repository.session.query(repository.DailyKline).count() logger.info(f"日K线数据表: {kline_count}条记录") if kline_count > 0: # 显示最新的5条K线数据 latest_kline = repository.session.query(repository.DailyKline).order_by( repository.DailyKline.trade_date.desc() ).limit(5).all() logger.info("最新的5条K线数据:") for i, kline in enumerate(latest_kline): logger.info(f" {i+1}. {kline.stock_code} - {kline.trade_date} - 收盘价: {kline.close_price}") # 按股票代码统计K线数据 kline_by_stock = repository.session.query( repository.DailyKline.stock_code, func.count(repository.DailyKline.id).label('count') ).group_by(repository.DailyKline.stock_code).all() logger.info("各股票的K线数据统计:") for stat in kline_by_stock[:10]: # 显示前10只股票 logger.info(f" {stat.stock_code}: {stat.count}条记录") if len(kline_by_stock) > 10: logger.info(f" ... 还有{len(kline_by_stock) - 10}只股票") except Exception as e: logger.error(f"查询K线数据失败: {str(e)}") kline_count = 0 # 检查财务报告表 try: financial_count = repository.session.query(repository.FinancialReport).count() logger.info(f"财务报告表: {financial_count}条记录") except Exception as e: logger.error(f"查询财务报告数据失败: {str(e)}") financial_count = 0 # 检查数据源表 try: datasource_count = repository.session.query(repository.DataSource).count() logger.info(f"数据源表: {datasource_count}条记录") except Exception as e: logger.error(f"查询数据源表失败: {str(e)}") datasource_count = 0 # 检查系统日志表 try: log_count = repository.session.query(repository.SystemLog).count() logger.info(f"系统日志表: {log_count}条记录") except Exception as e: logger.error(f"查询系统日志表失败: {str(e)}") log_count = 0 # 汇总结果 logger.info("数据验证汇总:") logger.info(f" 股票基础信息: {len(stocks)}条") logger.info(f" 日K线数据: {kline_count}条") logger.info(f" 财务报告: {financial_count}条") logger.info(f" 数据源: {datasource_count}条") logger.info(f" 系统日志: {log_count}条") return { "success": True, "stock_count": len(stocks), "kline_count": kline_count, "financial_count": financial_count, "datasource_count": datasource_count, "log_count": log_count } except Exception as e: logger.error(f"验证K线数据异常: {str(e)}") return {"success": False, "error": str(e)} def main(): """ 主函数 """ result = verify_kline_data() if result["success"]: logger.info("数据验证成功!") print(f"验证结果: {result}") if result["kline_count"] > 0: print("✓ K线数据已成功保存到数据库") print(f"✓ 共保存了{result['kline_count']}条K线数据") else: print("⚠ K线数据未保存到数据库") if result["stock_count"] > 0: print(f"✓ 股票基础信息: {result['stock_count']}条") else: print("⚠ 没有股票基础信息") else: logger.error("数据验证失败!") print(f"验证失败: {result.get('error')}") return result if __name__ == "__main__": # 运行验证 result = main() # 输出最终结果 if result.get("success", False): print("\n数据验证完成!") sys.exit(0) else: print("\n数据验证失败!") sys.exit(1)