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 小时前
请求原子性实现方式:Redis 互斥与数据库事务协同
数据库·redis·缓存
Navicat中国3 小时前
如何将 Navicat 的 AI 助手连接到本地 LLM
数据库·人工智能·navicat·本地llm
Gauss松鼠会3 小时前
GaussDB 内存相关参数及故障诊断
运维·数据库·sql·oracle·性能优化·架构·gaussdb
斯普信专业组4 小时前
Redis RESP3 协议规范:从入门到实战
数据库·redis·缓存
sunburn-4 小时前
数据库操作完整教程:从基础到实战
java·数据库·mysql
bksczm4 小时前
MySQL之读写分离与分库分表
数据库·mysql
姜鱼问生4 小时前
报数据库连不上?Docker Compose 启动顺序假象:depends_on 不是万能的!
数据库·docker·容器
梅孔立4 小时前
.mdb Access_MDB历史数据文件迁移MySQL实战教程-可直接投喂给ai参考这个帮你完成迁移
数据库·mysql·adb
时间售卖铺5 小时前
MySQL 数据库账户及授权
运维·数据库·mysql·云原生
l1t5 小时前
pgrust v0.4-beta 安装和查询测试
数据库·postgresql·rust·duckdb·pgrust