sqlite 合并两个数据库中的特定表

sqlite 合并两个数据库中的特定表

命令行

c 复制代码
.open 'v1/mydb.db'
attach 'v2/mydb.db' as db2;
insert into main.表1  select * from db2.表1;
insert into main.表2  select * from db2.表2;
.exit
参数 说明
v1/mydb.db 主db文件路径,合并后的结果就是它。
v2/mydb.db 要合并进 主db 的库。(合完后我们就不需要它了)
main .open 打开的是主库,默认名称为 main
db2 这是我们为 attach 的库取的别名

python 版本

python 复制代码
import sqlite3
import shutil
import argparse


def merge_tables_from_second_to_first(db1_path, db2_path, merged_db_path, table_names):
    # 复制主数据库以生成合并后的副本
    shutil.copyfile(db1_path, merged_db_path)

    # 连接到第二个数据库
    conn2 = sqlite3.connect(db2_path)
    cursor2 = conn2.cursor()

    # 连接到合并后的数据库
    conn_merged = sqlite3.connect(merged_db_path)
    cursor_merged = conn_merged.cursor()

    for table_name in table_names:
        # 从第二个数据库中获取指定表的数据
        cursor2.execute(f"SELECT * FROM {table_name}")
        data2 = cursor2.fetchall()
        column_names2 = [description[0] for description in cursor2.description]

        # 如果表在合并后的数据库中不存在,则创建
        cursor_merged.execute(f"CREATE TABLE IF NOT EXISTS {table_name} ({', '.join(column_names2)})")

        # 插入数据到合并后的数据库中
        insert_query = f"INSERT INTO {table_name} ({', '.join(column_names2)}) VALUES ({', '.join(['?' for _ in column_names2])})"
        cursor_merged.executemany(insert_query, data2)

    # 提交更改并关闭连接
    conn_merged.commit()
    conn2.close()
    conn_merged.close()


def main():
    parser = argparse.ArgumentParser(description="合并两个 SQLite 数据库中的特定表")

    parser.add_argument("db1_path", help="主数据库文件路径")
    parser.add_argument("db2_path", help="要合并的数据库文件路径")
    parser.add_argument("merged_db_path", help="合并后的数据库文件路径")
    parser.add_argument("table_names", nargs='+', help="需要合并的表名列表(两个库中的表名及表结构必须一致)")

    args = parser.parse_args()

    merge_tables_from_second_to_first(args.db1_path, args.db2_path, args.merged_db_path, args.table_names)


if __name__ == "__main__":
    main()

命令行调用

bash 复制代码
python merge_dbs.py D:\v1\mydb.db D:\v1\mydb.db D:\v1\merged.db 表1 表2
相关推荐
腾渊信息科技公司3 小时前
工业时序数据存储选型实战:从PostgreSQL到TDengine,查询从15秒到200ms
数据库·postgresql·tdengine
TDengine (老段)3 小时前
TDengine Node.js 与 C# 连接器 — Web 服务与 .NET 集成
大数据·数据库·node.js·c#·.net·时序数据库·tdengine
l1t4 小时前
PostgreSQL 11–18 中的 SQL 改进:个人精选-1
数据库·sql·postgresql
逃跑的浣熊4 小时前
MySQL 性能分析报告:Page Cache 与 fsync 对读写性能的影响
数据库
路由侠内网穿透.4 小时前
本地部署开源日志收集系统 Log Bull 并实现外部访问
运维·服务器·网络·数据库·开源
码云数智-大飞5 小时前
PHP 大文件上传、断点续传完整实现思路
数据库
sevenll075 小时前
SqlKit - 覆盖 50+ 数据库的 AI 智能体 SQL 桌面客户端
数据库·人工智能·sql·智能体
数智化管理手记8 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
ShiXZ21314 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存
晓子文集14 小时前
Tushare接口文档:期货日线行情(fut_daily)
大数据·数据库·金融数据·量化投资·tushare