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
相关推荐
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql
jnrjian4 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle