.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 的库取的别名

合并SQLite.bat

  1. 将两个要合并的 db 文件拖到 合并SQLite.bat 即可生成合并后的 merged.db
  2. 需要合并的在这里设置:SET "TABLE_NAMES=表1 表2 表3 表4" (用空格分割)
@echo off
CHCP 65001 > nul
cd /d %~dp0
REM 定义sqlite3 路径,数据库文件路径
SET "SQLITE3_EXE=sqlite\sqlite3.exe"
SET "DB_1=%1"
SET "DB_2=%2"
SET "DB_merged=merged.db"
SET "TEMP_SQL_FILE=temp_sql_filt_4_import.txt"
SET "TABLE_NAMES=表1 表2 表3 表4"
echo ------------------------------------------
echo  初始化
echo ------------------------------------------
echo.
echo  正在创建 %DB_1% 副本 %DB_merged%
copy "%DB_1%" "%DB_merged%" > nul
echo.
echo ------------------------------------------
echo  开始合并
echo ------------------------------------------
echo.
echo BEGIN TRANSACTION; > %TEMP_SQL_FILE%
echo attach %DB_2% as db2; >> %TEMP_SQL_FILE%
REM 遍历所有表名
for %%A in (%TABLE_NAMES%) do (
	echo insert into main."%%A"  select * from db2."%%A"; >> %TEMP_SQL_FILE%
echo COMMIT; >> %TEMP_SQL_FILE%
REM 显示命令
type %TEMP_SQL_FILE%
"%SQLITE3_EXE%" "%DB_merged%" < %TEMP_SQL_FILE%
echo.
echo ------------------------------------------
echo  合并成功
echo ------------------------------------------
REM 清理资源
del %TEMP_SQL_FILE%
PAUSE

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()

命令行调用

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