#!/usr/bin/env python3 # -*- coding: utf-8 -*- """probe_dbbardata_unique.py — 单元4 merge 前置: 查 dbbardata UNIQUE 约束 + verify staging。 INSERT OR REPLACE 依赖 dbbardata 有 UNIQUE(symbol,exchange,datetime,interval) 才能去重, 否则插重复。vnpy DbBarData 通常有 UniqueConstraint, 此处确认。 """ import sqlite3 DB = r"C:\sanguo_vnpy_v2\data\quant_trading.db" c = sqlite3.connect(DB, timeout=120) c.execute("PRAGMA busy_timeout = 120000") print("dbbardata sql:", c.execute( "SELECT sql FROM sqlite_master WHERE name='dbbardata'").fetchone()) print("\ndbbardata indexes:") for idx in c.execute("PRAGMA index_list('dbbardata')").fetchall(): cols = c.execute(f"PRAGMA index_info('{idx[1]}')").fetchall() print(f" {idx} cols={cols}") print("\n--- staging verify ---") print("staging rows:", c.execute( "SELECT COUNT(*) FROM dbbardata_staging_daily").fetchone()[0]) print("staging distinct symbol:", c.execute( "SELECT COUNT(DISTINCT symbol) FROM dbbardata_staging_daily").fetchone()[0]) for sym, label in [("000005", "退市"), ("000023", "退市"), ("600519", "在市"), ("510300", "ETF")]: r = c.execute( "SELECT COUNT(*), MIN(datetime), MAX(datetime) " "FROM dbbardata_staging_daily WHERE symbol=?", (sym,)).fetchone() print(f" {sym}({label}): {r}") c.close()