赞
踩
.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 的库取的别名 |
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()
命令行调用
python merge_dbs.py D:\v1\mydb.db D:\v1\mydb.db D:\v1\merged.db 表1 表2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。