python 对比数据库,生成sql

import pymysqldef get_table_structure(connection, cursor, database, table):# 获取表结构query = f"SHOW COLUMNS FROM {database}.{table}"cursor.execute(query)return cursor.fetchall()def generate_create_table(cursor, table_structure, database, table):# 生成创建表的SQL语句,包含字段约束、默认值和主键信息columns = []for column in table_structure:column_name = column[0]column_type = column[1]is_nullable = "NOT NULL" if column[2] == "NO" else ""default_value = f"DEFAULT {column[4]}" if column[4] is not None else ""columns.append(f"`{column_name}` {column_type} {is_nullable} {default_value}")# 查找主键信息cursor.execute(f"SHOW KEYS FROM {table} WHERE Key_name = 'PRIMARY'")primary_key = cursor.fetchone()if primary_key:columns.append(f"PRIMARY KEY (`{primary_key[4]}`)")return f"CREATE TABLE `{database}`.`{table}` ({', '.join(columns)});"def generate_add_or_modify_column(connection, cursor, database, table, column_structure):# 生成添加字段或修改字段的SQL语句alter_statements = []for column_info in column_structure:# column_name, column_type, is_nullable, default_value = column_info# default_clause = f"DEFAULT {default_value}" if default_value is not None else ""column_name = column_info[0]column_type = column_info[1]is_nullable = "NOT NULL" if column_info[2] == "NO" else ""default_value = f"DEFAULT  {column_info[4]}" if (column_info[4] is not None and column_info[4]) else "DEFAULT NULL"# 检查字段是否已经存在if is_column_exists(cursor, database, table, column_name):# 字段存在,生成修改字段的SQL语句alter_statements.append(f"ALTER TABLE `{database}`.`{table}` MODIFY COLUMN `{column_name}` {column_type} {is_nullable} {default_value} ;")else:# 字段不存在,生成添加字段的SQL语句alter_statements.append(f"ALTER TABLE `{database}`.`{table}` ADD COLUMN `{column_name}` {column_type} {is_nullable} {default_value} ;")return alter_statementsdef is_column_exists(cursor, database, table, column_name):# 检查字段是否存在于目标表中query = f"SHOW COLUMNS FROM `{database}`.`{table}` LIKE '{column_name}'"cursor.execute(query)return cursor.fetchone() is not Noneif __name__ == "__main__":dba ="test";dbb = "test1";# 连接数据库Adb_a = pymysql.connect(host="127.0.0.1", port=3307, user="root", password="123456", database=dba)cursor_a = db_a.cursor()# 连接数据库Bdb_b = pymysql.connect(host="127.0.0.1", port=3307, user="root", password="123456", database=dbb)cursor_b = db_b.cursor()# 获取数据库A中的表cursor_a.execute("SHOW TABLES")database_a_tables = [table[0] for table in cursor_a.fetchall()]# 获取数据库B中的表cursor_b.execute("SHOW TABLES")database_b_tables = [table[0] for table in cursor_b.fetchall()]# 比较两个数据库的表结构并生成SQL语句for table in database_a_tables:if table not in database_b_tables:# 表在库B中缺失,生成创建表语句table_structure = get_table_structure(db_a, cursor_a,dba, table)create_table_sql = generate_create_table(cursor_a, table_structure, dbb, table)print(create_table_sql)else:# 表在库B中存在,比较字段columns_a = get_table_structure(db_a, cursor_a, dba, table)columns_b = get_table_structure(db_b, cursor_b,dbb, table)# 字段差异column_diff = [col for col in columns_a if col not in columns_b]# 生成添加字段或修改字段的SQL语句alter_column_sqls = generate_add_or_modify_column(db_b, cursor_b, dbb, table, column_diff)for alter_column_sql in alter_column_sqls:print(alter_column_sql)# 关闭数据库连接db_a.close()db_b.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins传参给robotframework

在做自动化的时候,需要使用jenkins传参给rf,rf根据传来的变量运行,在将变量传递给py脚本文件。特此记录。 一、配置jenkins 构建的命令使用如下格式即可(注意空格): cd D:\xxx\test call pybot --variabl…

英语 更新学习英语的过程

吃饭相关 目录 吃饭相关 询问 would 主语 like noun/to do? 询问他人意愿 What would 主语 like ( to do) ? 询 问他人的意愿 餐饮用具 烹饪 询问 would 主语 like noun/to do? 询问他人意愿 Would you like dinner? Would you like meat? Woul…

go语言学习-异常处理

1、异常场景 网络故障硬件故障组件故障输入错误逻辑错误链路调度错误 2、异常处理方式 # python或者java异常处理 try 可能出现的错误 catch对错误进行处理 xxx,err : 代码 if err ! nil {代码出现错误,需要做处理 }3、自定义错误 有两种方法:1、通过…

砖家测评:腾讯云标准型S5服务器和s6性能差异和租用价格

腾讯云服务器CVM标准型S5和S6有什么区别?都是标准型云服务器,标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好…

视频剪辑技巧:批量剪辑新篇章,AI智剪来领航

随着数字媒体的飞速发展,视频剪辑已经成为一项重要的工作。在繁忙的工作中,如何高效、准确地完成批量剪辑是一项具有挑战性的任务。近年来,AI智剪的出现为视频剪辑工作带来了新的解决方案,引领着批量剪辑的新篇章。在AI智剪的帮助…

为了摆脱 Android ,亚马逊开发基于Linux的操作系统

导读亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”,以便在 Fire TV、智能显示器和其他联网设备上取代 Android 系统。 亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”,以便在 Fire TV、智能显示器和其他联网设备上取代 Andr…

终于有人把数据资产入表知识地图总结出来了,轻松看懂

在当前数字化的浪潮下,数据已经成为劳动、土地、知识、技术以后的第五大生产要素,“数据就是资源”已成为共识。如今数据资产“入表”已成定局,数据资产化迫在眉睫。 2023年8月21日,财政部正式印发《企业数据资源相关会计处理暂行…

科技的成就(五十三)

503、任天堂首次公开 Switch 2016 年 10 月 20 日,任天堂首次公开 Switch 正式名称及造型。Switch 是任天堂推出的混合型游戏机,可作为家用游戏机,也可作为便携式掌机。Switch 在开发过程中就以代号 NX 而闻名,成为当年的现象级产…

什么样的企业可以使用免费版的CRM?

市面上大部分的免费CRM不需要付费即可使用,但是对于使用人数和功能进行了部分限制。下面我们就来说说,免费CRM的适用对象是谁? 1、初创/小微企业 这种小微企业没有太多的资金,也没有复杂的客户管理需求,仅仅需要一款…

生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法

场景: 我目前设计到的场景是:以路面上行驶的汽车为例,即在地图应用中,对GPS轨迹数据进行压缩,减少数据传输和存储开销,因为轨迹点太频繁了,占用空间太大,运行节点太慢了&#xff0c…

设置ALPHA开发板通过tftp服务加载kernel与设备树文件

一. 简介 为了方便调试,开发板可以暂时设置为 从 ubuntu虚拟机下载 kernel 与设备树文件,并运行。 本文学习如何设置,设置方法具体就是更改 uboot源码中 bootcmd 与 bootargs参数。 二. 设置ALPHA开发板通过tftp服务加载kernel与设备树文…

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现)

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现) 0、功能展示1、项目原理介绍2、数据集采集脚本3、将采集到的动作数据集利用mediapipe库检测手部关键点信息,转换成数据信息保存到本地4、训练一个效果一般的随机森林分类器5、使用Kreas训练一个效果好点的全连…

提高软件测试覆盖率的5个重点

软件测试覆盖率是软件测试中的一个重要指标,它有利于保障软件质量、提高软件可靠性和可维护性。软件测试覆盖率能够发现并修复代码缺陷,确保代码的正确性,提高软件的稳定性,降低成本和风险。 因此进一步提高软件测试覆盖率对于软件…

Linux 之查看标准错误码工具

目录 1. Linux 之查看标准错误码工具 1. Linux 之查看标准错误码工具 $ sudo apt install moreutils$ errno -l EPERM 1 不允许的操作 ENOENT 2 没有那个文件或目录 ESRCH 3 没有那个进程 EINTR 4 被中断的系统调用 EIO 5 输入/输出错误 ENXIO 6 没有那个设备或地址 E2BIG 7 参…

Oauth2认证及Spring Security Oauth2授权码模式

Oauth2认证 Oauth2简介 简介 第三方认证技术方案最主要是解决认证协议的通用标准问题,因为要实现跨系统认证,各系统之间要遵循一定的接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使…

ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2308.04352 开源代码:http://3d-vista.github.io 摘要: 3D视觉语言标定(3D-VL)是一个新兴领域,旨在将…

类型体系与基本数据类型(第三节)

目录 前言 一、标量 1.1 类模板的声明 1.2 基于CPU的特化版本 1.3 标量的主体类型 前言 一个深度学习框架的初步实现为例,讨论如何在一个相对较大的项目中深入应用元编程,为系统优化提供更多的可能。 以下内容结合书中原文阅读最佳!&a…

centos7安装mysql8

打开Mysql下载页面 https://downloads.mysql.com/archives/community/ 选择版本号: centos选择Red Hat版本,复制地址 复制地址后,链接ssh,添加储存库 yum install 粘贴地址; yum install https://downloads.mysql…

人工智能基础_机器学习044_使用逻辑回归模型计算逻辑回归概率_以及_逻辑回归代码实现与手动计算概率对比---人工智能工作笔记0084

上面我们已经把逻辑回归的公式,以及,公式对应的图形都画画出来了,然后我们再来看看 如何用代码实现 可以看到上面是代码,咱们自己去写一下 import numpy as np from sklearn.linear_model import LogistieRegression from sklearn import datasets # 训练数据和测试数据拆分…

人工智能时代下的程序员核心竞争力:构建专属护城河

选题建议:《人工智能时代下的程序员核心竞争力:构建你的护城河》 大纲: I. 引言 A. 人工智能时代的发展趋势B. 程序员面临的挑战与机遇 I. 引言 A. 人工智能时代的发展趋势 随着科技的飞速进步,我们已经踏入了一个日新月异的人工…