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

59 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
"""
生成导入数据的SQL脚本
因为scp网络有问题,直接生成SQL文本传到容器执行
"""
import pandas as pd
from vnpy.trader.constant import Exchange, Interval
parquet_path = "/Users/chufeng/nas/stock-data/sanguo_quant_live/zhaoyun-data/data/raw/daily/sh510300_daily.parquet"
symbol = "510300"
exchange = Exchange.SSE
exchange_code = exchange.value
interval = Interval.DAILY
interval_code = interval.value
df = pd.read_parquet(parquet_path)
print(f"读取数据: {len(df)}")
output_file = "/Users/chufeng/.openclaw/workspace-jiangwei/import_data.sql"
with open(output_file, 'w') as f:
f.write("BEGIN TRANSACTION;\n")
f.write("DELETE FROM dbbardata WHERE symbol = ? AND exchange = ?;\n")
f.write(f"-- 准备插入 {len(df)} 条数据\n")
for idx, row in df.iterrows():
dt = row['trade_date']
# 转换为Unix时间戳?不,vnpy存datetime
dt_str = dt.strftime('%Y-%m-%d %H:%M:%S')
open_price = row['open']
high_price = row['high']
low_price = row['low']
close_price = row['close']
volume = row['volume']
turnover = row['amount']
# vnpy_sqlite表结构dbbardata:
# id (INTEGER PRIMARY KEY AUTOINCREMENT)
# symbol (TEXT)
# exchange (TEXT)
# interval (TEXT)
# datetime (datetime)
# open_price (float)
# high_price (float)
# low_price (float)
# close_price (float)
# volume (int)
# turnover (float)
sql = f"""INSERT INTO dbbardata (symbol, exchange, interval, datetime, open_price, high_price, low_price, close_price, volume, turnover) VALUES ('{symbol}', '{exchange_code}', '{interval_code}', '{dt_str}', {open_price}, {high_price}, {low_price}, {close_price}, {volume}, {turnover});\n"""
f.write(sql)
f.write("COMMIT;\n")
f.write("-- 导入完成\n")
print(f"SQL脚本生成完成: {output_file}")
print(f"文件大小: {open(output_file).read().__len__()} bytes")