当前位置: 首页 > news >正文

sqlite 合并两个数据库中的特定表

sqlite 合并两个数据库中的特定表

  • 命令行
  • python 版本

命令行

.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 版本

import sqlite3
import shutil
import argparsedef 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
http://www.lryc.cn/news/419611.html

相关文章:

  • winform中设置DateTimePicker参数为空
  • Python爬虫(8)
  • 靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测
  • zdpgo_gin_limit 为zdpgo_gin打造的接口限流框架,当API接口需要限制访问频率的时候可以使用此框架
  • Java1234的Vue学习笔记
  • 嵌入式八股-C++面试91题(20240809)
  • 如何恢复误删视频?找回误删视频文件的办法分享
  • 游戏手柄开发一款游戏
  • 【阿旭机器学习实战】【39】脑肿瘤数据分析与预测案例:数据分析、预处理、模型训练预测、评估
  • 深度学习基础 - 梯度垂直于等高线的切线
  • py2exe打包
  • Gerrit存在两个未审核提交且这两个提交有冲突时的解决方案
  • 基于单片机的智能风扇设计
  • 【实战】Spring Security Oauth2自定义授权模式接入手机验证
  • Redis数据失效监听
  • 【达梦数据库】-SQL调优思路
  • DispatcherServlet 源码分析
  • 代码随想录算法训练营第十八天| 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
  • 会议室占用的时间(75%用例)D卷(JavaPythonC++Node.jsC语言)
  • C++初阶_1:namespace
  • 低代码开发平台:效率革命还是质量隐忧?
  • 在 Django 表单中传递自定义表单值到视图
  • Android之复制文本(TextView)剪贴板
  • Ubuntu24.04设置国内镜像软件源
  • 分布式与微服务详解
  • Vue设置滚动条自动保持到最底端
  • uniapp创建一个新项目并导入uview-plus框架
  • LabVIEW光电在线测振系统
  • 分布式光伏电站 转化能源 丰富用电结构
  • 环境配置:如何在IntelliJ IDEA中安装和修改JDK版本配置(以Windows为例)