157 lines
4.5 KiB
Python
157 lines
4.5 KiB
Python
"""
|
|
验证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) |