Files
sanguo_vnpy/archive/2026-04-29-cleanup/scripts/utils/check_vnpy_data.py
T
2026-04-29 20:15:43 +08:00

166 lines
6.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""
检查赵云将军本地数据中的 510300.SSE 标的
"""
import sqlite3
import pandas as pd
import sys
import os
def find_vnpy_database():
"""查找vn.py数据库文件"""
db_paths = [
'/Users/chufeng/.openclaw/workspace-zhaoyun/sanguo_quant_live/zhaoyun-data/data/running_data/database_test.db',
'/Users/chufeng/.openclaw/workspace-zhaoyun/zhaoyun-data/data/database_test.db',
'/Users/chufeng/.openclaw/memory/zhaoyun-data.sqlite',
]
existing_dbs = []
for path in db_paths:
if os.path.exists(path):
existing_dbs.append(path)
print(f"✅ 找到数据库: {path}")
else:
print(f"❌ 不存在: {path}")
return existing_dbs
def check_symbol_in_db(db_path, symbol):
"""检查数据库中是否存在指定标的"""
print(f"\n🔍 检查数据库 {db_path} 中的 {symbol}...")
try:
conn = sqlite3.connect(db_path)
# 列出所有表
cursor = conn.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = cursor.fetchall()
print(f"📊 数据库中的表: {[t[0] for t in tables]}")
# 检查可能的表名
for table_name in ['dbbardata', 'bar_data', 'daily_data', '1d', 'daily']:
try:
# 检查表是否存在
cursor.execute(f"SELECT EXISTS (SELECT 1 FROM sqlite_master WHERE type='table' AND name='{table_name}');")
exists = cursor.fetchone()[0]
if exists:
print(f"\n🔍 检查表 {table_name}...")
# 获取总行数
cursor.execute(f"SELECT COUNT(*) FROM {table_name};")
total_rows = cursor.fetchone()[0]
print(f" 总行数: {total_rows}")
# 检查symbol是否存在
cursor.execute(f"SELECT DISTINCT symbol FROM {table_name} WHERE symbol = ?", (symbol,))
result = cursor.fetchone()
if result:
print(f" ✅ 找到标的: {symbol}")
# 获取该标的数据量
cursor.execute(f"SELECT COUNT(*) FROM {table_name} WHERE symbol = ?", (symbol,))
count = cursor.fetchone()[0]
print(f" 数据行数: {count}")
# 获取时间范围
cursor.execute(f"SELECT MIN(datetime), MAX(datetime) FROM {table_name} WHERE symbol = ?", (symbol,))
min_dt, max_dt = cursor.fetchone()
print(f" 时间范围: {min_dt} -> {max_dt}")
# 获取前5行数据
cursor.execute(f"SELECT * FROM {table_name} WHERE symbol = ? ORDER BY datetime LIMIT 5", (symbol,))
rows = cursor.fetchall()
# 获取列名
cursor.execute(f"PRAGMA table_info({table_name})")
columns = [col[1] for col in cursor.fetchall()]
print(f" 列名: {columns}")
print(f" 前5行数据:")
for row in rows:
print(f" {row}")
conn.close()
return True, {
'table': table_name,
'count': count,
'min_dt': min_dt,
'max_dt': max_dt,
'columns': columns
}
else:
print(f" ❌ 未找到标的 {symbol}")
# 列出可用标的供参考
cursor.execute(f"SELECT DISTINCT symbol FROM {table_name} LIMIT 10")
symbols = cursor.fetchall()
if symbols:
print(f" 可用标的 (前10个): {[s[0] for s in symbols]}")
except Exception as e:
print(f" ⚠️ 检查表出错: {e}")
continue
conn.close()
return False, None
except Exception as e:
print(f"❌ 连接数据库出错: {e}")
return False, None
def main():
"""主函数"""
print("🚀 检查赵云将军本地数据中的 510300.SSE 标的")
print("="*60)
symbol_to_check = "510300.SSE"
print(f"目标标的: {symbol_to_check}")
# 查找数据库
dbs = find_vnpy_database()
if not dbs:
print("❌ 未找到任何数据库文件")
print("\n📋 可能的原因:")
print("1. 赵云将军的数据还未转换到vn.py格式")
print("2. 数据路径配置错误")
print("3. 510300.SSE 数据还未下载")
return False
# 检查每个数据库
found = False
result = None
for db in dbs:
found_db, result_db = check_symbol_in_db(db, symbol_to_check)
if found_db:
found = True
result = result_db
break
# 总结
print("\n" + "="*60)
print("检查结果:")
if found:
print(f"✅ 找到 {symbol_to_check} 数据")
print(f" 数据行数: {result['count']}")
print(f" 时间范围: {result['min_dt']} -> {result['max_dt']}")
print(f" 数据列: {result['columns']}")
print(f" 表名: {result['table']}")
else:
print(f"❌ 未找到 {symbol_to_check} 数据")
print("\n📋 需要检查:")
print("1. 赵云将军是否已下载 510300.SSE 数据")
print("2. 数据是否已转换为vn.py格式")
print("3. 数据路径配置是否正确")
print("="*60)
return found
if __name__ == "__main__":
main()