"""VPS 端:全量导出单张小表到独立 sqlite 文件(搬数据,merge 端重建 schema)。 用于 constituent_unified / bs_adjust_factor 等小表全量同步 (无 id 增量键、行数万级、变化不频繁,全量 dump+replace 最简)。 - 纯 sqlite3 标准库,零第三方依赖。 - 只读主库(mode=ro),不干扰 VPS 生产写入。 - CREATE TABLE AS SELECT 搬数据(列名保留;约束由 NAS merge 端权威 schema 重建)。 用法: python export_table.py --db PATH --out out.db --table constituent_unified """ import argparse import os import sqlite3 def main(): ap = argparse.ArgumentParser(description="全量导出单张小表到独立 sqlite") ap.add_argument("--db", required=True, help="源 quant_trading.db 路径") ap.add_argument("--out", required=True, help="输出 sqlite 路径") ap.add_argument("--table", required=True, help="表名") args = ap.parse_args() tbl = args.table conn = sqlite3.connect("file:%s?mode=ro" % args.db, uri=True) cur = conn.cursor() exists = cur.execute( "SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", (tbl,) ).fetchone() if not exists: raise SystemExit("table not found in source db: %s" % tbl) if os.path.exists(args.out): os.remove(args.out) cur.execute("ATTACH DATABASE ? AS inc", (args.out,)) cur.execute( "CREATE TABLE inc.[%s] AS SELECT * FROM main.[%s]" % (tbl, tbl) ) n = cur.execute("SELECT COUNT(*) FROM inc.[%s]" % tbl).fetchone()[0] conn.commit() conn.close() print("EXPORTED table=%s rows=%d sizeMB=%.2f -> %s" % (tbl, n, os.path.getsize(args.out) / 1048576.0, args.out)) if __name__ == "__main__": main()