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
相关推荐
混乱意志1 小时前
dgraph example数据导入
数据库·后端
Web极客码1 小时前
WordPress 站点漏洞利用:数据库恶意注入与多重感染的案例分析
数据库·wordpress·网站安全·数据库注入·wordpress漏洞·wordpress安全插件
刺客xs1 小时前
MySQL数据库----DML语句
数据库·mysql
嘉讯科技HIS系统2 小时前
嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
大数据·数据库·人工智能·科技·智慧医疗
小宁爱Python3 小时前
FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南
sqlite·html·fastapi
爱上语文3 小时前
Redis基础(4):Set类型和SortedSet类型
java·数据库·redis·后端
lifallen3 小时前
Paimon vs. HBase:全链路开销对比
java·大数据·数据结构·数据库·算法·flink·hbase
Brookty4 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
先做个垃圾出来………4 小时前
SQL的底层逻辑解析
数据库·sql
码不停蹄的玄黓5 小时前
深入拆解MySQL InnoDB可重复读(RR)隔离级别:MVCC+临键锁如何「锁」住一致性?
数据库·mysql·可重复读