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
参考:https://blog.csdn.net/zhanglianyu00/article/details/78436764
sqlite3 test2.
sqlite
attach "test1.
sqlite" as AM;
insert into tiles(zoom_level,tile_column,tile_row,tile_data) select zoom_level,tile_column,tile_row,tile_data from AM.tiles;
假设表table1存在test1.db,表table2存在test2.db,现需要将table2迁移至test1.db中。
1、在test1.db中,从File—>Attach Database进去,选择test2.db文件,将test2.db中所有的表添加进test1.db中,如下图1所示;
2、执行语句
create table table2 as select * from t...
attach DataBase 'F:\
Sqlitedatabase.db' as db2;
delete from Test where Test.ID in (select ID from db2.Test);
insert into Test select A.* from db2.Test as A ;
select * from db2.Test;
detach database