mysql转达梦的python脚本

mysql_ddl:

CREATE TABLE `ops_app_import` (`id` char(32) NOT NULL COMMENT '主键ID',`pkg_name` varchar(255) NOT NULL DEFAULT '' COMMENT '导入包名称',`pkg_md5` varchar(32) NOT NULL COMMENT '导入包md5值',`backup_pkg_name` varchar(255) DEFAULT '' COMMENT '备份包名称',`backup_pkg_md5` varchar(32) DEFAULT '' COMMENT '备份包md5值',`process_status` varchar(32) DEFAULT '' COMMENT '处理状态',`comment` varchar(255) NOT NULL DEFAULT '' COMMENT '描述',`creator_id` char(32) DEFAULT '0' COMMENT '创建者ID',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用导入包';

dameng_ddl:

CREATE TABLE "ops_app_import" ("id" char(32) NOT NULL COMMENT '主键ID',"pkg_name" varchar(255) NOT NULL DEFAULT '' COMMENT '导入包名称',"pkg_md5" varchar(32) NOT NULL COMMENT '导入包md5值',"backup_pkg_name" varchar(255) DEFAULT '' COMMENT '备份包名称',"backup_pkg_md5" varchar(32) DEFAULT '' COMMENT '备份包md5值',"process_status" varchar(32) DEFAULT '' COMMENT '处理状态',"comment" varchar(255) NOT NULL DEFAULT '' COMMENT '描述',"creator_id" char(32) DEFAULT '0' COMMENT '创建者ID',"gmt_create" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',"gmt_modified" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP  COMMENT '修改时间',PRIMARY KEY ("id")
);

脚本:

index_sql_list = []def replaceKey(line, currTable):indexColumnStart = line.index("(")indexColumnEnd = line.index(")")if (line.lstrip().upper().startswith("KEY")):indexSql = f"CREATE INDEX {line.lstrip()[4: indexColumnStart - 2]} ON {currTable}({line[indexColumnStart + 1: indexColumnEnd]});"else:indexSql = f"CREATE UNIQUE INDEX {line.lstrip()[11: indexColumnStart - 2]} ON {currTable}({line[indexColumnStart + 1: indexColumnEnd]});"index_sql_list.append(indexSql)def getTable(line):indexCreate = 0if line.startswith("CREATE TABLE IF NOT EXISTS"):indexCreate = len("CREATE TABLE IF NOT EXISTS")elif line.startswith("CREATE TABLE"):indexCreate = len("CREATE TABLE")indexEnd = line.index("(")return line[indexCreate:indexEnd].rstrip("(").strip()if __name__ == "__main__":result = []currTable = ''with open('mysql_ddl.sql', 'r') as file:line = file.readline()while line:# 替换`x`为"x"line = line.replace("`", "\"").replace("\n", "").replace("unsigned", "")# longtext替换line = line.replace("longtext", "text").replace("LONGTEXT", "TEXT")# mediumblob 替换line = line.replace("mediumblob", "blob").replace("MEDIUMBLOB", "BLOB")lTrimUpperLine = line.lstrip().upper()# 替换DEFAULT CURRENT_TIMESTAMP ON UPDATEif lTrimUpperLine.count("DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") > 0:line = line.replace("ON UPDATE CURRENT_TIMESTAMP", "") \.replace("on UPDATE CURRENT_TIMESTAMP", "") \.replace("on update CURRENT_TIMESTAMP", "") \.replace("ON update CURRENT_TIMESTAMP", "")# 替换ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENTif lTrimUpperLine.count(") ENGINE=INNODB") > 0:line = ");"# 查询当前所属表if lTrimUpperLine.startswith("CREATE TABLE "):currTable = getTable(line)# 移除bigint、int、tinyint的显示占位符if line.count(" bigint(") > 0:indexBigint = line.find("bigint(")right = line[indexBigint + 6:]right = right[right.find(")") + 1:]line = line[:indexBigint + 6] + rightif line.count(" int(") > 0:indexBigint = line.find("int(")right = line[indexBigint + 3:]right = right[right.find(")") + 1:]line = line[:indexBigint + 3] + rightif line.count(" tinyint(") > 0:indexBigint = line.find("tinyint(")right = line[indexBigint + 7:]right = right[right.find(")") + 1:]line = line[:indexBigint + 7] + right# 唯一索引替换if lTrimUpperLine.startswith("UNIQUE "):column = line[line.index("("):line.index(")") + 1]line = f"UNIQUE {column},"# 记录索引if lTrimUpperLine.startswith("KEY "):replaceKey(line, currTable)# 检测到结尾,移除上一行最后一个逗号elif line.count(");") > 0:lastLine = result[-1:][0]if lastLine.rstrip().endswith(","):lastLine = lastLine.rstrip(",")result.pop()result.append(lastLine)result.append(line)elif (lTrimUpperLine.strip() is Noneor len(lTrimUpperLine.strip()) == 0or lTrimUpperLine.startswith("/*")or lTrimUpperLine.startswith("LOCK TABLES")or lTrimUpperLine.startswith("UNLOCK TABLES;")or lTrimUpperLine.startswith("--")or lTrimUpperLine.strip() is None):passelse:result.append(line)line = file.readline()for x in index_sql_list:result.append(x)with open("dameng_ddl.sql", "w") as f:for r in result:f.writelines(r + "\n")

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

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

相关文章

[剪藏] - 由哇哈哈和农夫山泉所想到的

哇哈哈和农夫山泉的缠斗最近冒出来一个有趣的点:营销大于内容的胜利。 具体来说是这样的:农夫山泉很多年前做广告,说纯净水没有矿物质,长期喝是不利于人体健康的。农夫还做了个营销的对比实验,大概是用矿泉水养水仙花&…

龙芯杯赛道-学习过程记录

Preface&免责声明: 由于参赛资料企业并未开源,所以我不能开放出有关参赛的资料 但是我会在这里记录参赛时看不懂的一系列知识补充 ------------------------------------------------------------------------------------------------------- TSEN…

音视频开发之旅(75)- AI数字人进阶--GeneFace++

目录 1.效果展示和玩法场景 2.GeneFace原理学习 3.数据集准备以及训练的过程 5.遇到的问题与解决方案 6.参考资料 一、效果展示 AI数字人进阶--GeneFace(1) AI数字人进阶--GeneFace(2) 想象一下,一个专为你打造的…

前端算法 - 查找

1 二分查找 /*** param {number[]} nums* param {number} target* return {number}*/ var search function (nums, target) {let left 0, right nums.length - 1while (left < right) {let mid Math.floor((left right) / 2)if (target < nums[mid]) {right mid -…

为什么 VSCode 不用 Qt 而要用 Electron?

为什么 VSCode 不用 Qt 而要用 Electron? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Qt 的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&am…

Python基础课堂最后一课23——正则对象

文章目录 前言一、正则对象是什么&#xff1f;二、正则表达式基本分类1.普通字符2.元字符 总结 前言 很开心能和你们一些学习进步&#xff0c;在这一个多月的时间中&#xff0c;是你们让我坚持了下来&#xff0c;完成了python基础课堂编写&#xff0c;不管如何&#xff0c;我们…

C语言学习(第二十课)初识函数5(函数递归2)

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> //编写函数&#xff0c;不允许创建临时变量&#xff0c;求字符串长度 ///1、可以使用临时变量的写法&#xff1a; //int my_strlen(char* str) //{ // int count 0; // while (*s…

安卓Java面试题 121- 130

131. Android垃圾回收机制和程序优化System.gc( ) ?垃圾收集算法的核心思想:对虚拟机的可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,则称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。 JVM进行次GC的频率很高…

Linux系统——Nginx脚本拦截拓展

可能会有些无聊的人对服务器的Nginx服务进行恶意访问网站、API接口&#xff0c;会影响到用户的体验&#xff0c;我们可以做一个简单的脚本对恶意访问的IP做一个有效的拦截&#xff0c;揪出这些IP地址&#xff0c;然后将其进行禁用。 在Nginx的conf目录下新建一个blockip.conf文…

Python(C_Cpp)分析模拟Arduino和Raspberry Pi(单板机)CAN总线和车载单元测试

要点 CAN总线释义&#xff1a;物理层结构&#xff0c;数据帧&#xff0c;数据交换&#xff0c;总线接口物理模块。一对Arduino CAN &#xff08;Arduino C 处理&#xff09;总线项目&#xff1a; 发送端发送随机数据&#xff0c;接收端接收并计算。发送端点动信号&#xff0c;…

certificate has expired or is not yet valid:npm和node证书过期问题

在 1 月 22 日&#xff0c;淘宝原镜像域名&#xff08;registry.npm.taobao.org&#xff09;的 HTTPS 证书正式到期。如果想要继续使用&#xff0c;需要将 npm 源切换到新的源&#xff08;registry.npmmirror.com&#xff09;&#xff0c;否则会报错。 解决方案切换到新的源&a…

HTML表单

本文章属于学习笔记&#xff0c;在https://www.freecodecamp.org/chinese/learn/2022/responsive-web-design/中练习 四、HTML表单 CSS 1、vh单位表示视口高度&#xff0c;等于视口高度的1%。这使得它相对于视口高度。height:100vh; 2、设置 body 的默认 margin 为 0 来重置…

【掌握版本控制:Git 入门与实践指南】远程操作|标签管理

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;泥中に咲く—ウォルピスカーター 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶…

汽车IVI中控开发入门及进阶(十三):语音识别

前言: IVI中控上的语音识别,在目前市场上也是非常显眼的一个创新,大幅改变了传统IVI的操作习惯。 语音识别Speech recognition,也称为自动语音识别(ASR)、计算机语音识别或语音到文本,是一种使程序能够将人类语音处理成书面格式的能力。 语音识别Speech recognition是计…

数码管的静态显示(二)

1.原理 要按照上图的顺序传递位选和段选的数据。 因为q0是最高位&#xff0c;共阳极数码管结构是dp....a&#xff0c;所以应该先传入低位a&#xff0c;而a在上图中的8段2进制编码中是seg[7]&#xff0c;所以段选信号的顺序是seg[0],...seg[7]。 因为输出信号是两个时钟&#x…

Docker入门笔记(1)

Docker入门笔记&#xff08;1&#xff09; 容器技术入门 之前我的WIT问卷管理系统在阿里云上部署需要好多配置&#xff0c;各个环境耦合的比较紧密&#xff0c;花了不少时间去做部署和调配。 现在有了Docker以后&#xff0c;我们可以把各种组件配置好&#xff0c;然后打包成…

使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示

前言 在.NET应用开发中数据集的交互式显示是一个非常常见的功能&#xff0c;如需要创建折线图、柱状图、饼图、散点图等不同类型的图表将数据呈现出来&#xff0c;帮助人们更好地理解数据、发现规律&#xff0c;并支持决策和沟通。本文我们将一起来学习一下如何使用ScottPlot库…

C语言snprintf():将格式化字符串输出到数组中

snprintf() 是 C语言的一个标准库函数&#xff0c;定义在<stdio.h>头文件中。 snprintf() 函数的功能是格式化字符串&#xff0c;并将结果存储在指定的字符数组中。该函数的原型如下&#xff1a; int snprintf(char *str, size_t size, const char *format[,argument...…

websocket逆向案例

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、案例地址二、分析流程三、逆向参数四、webSocket 交互位置总结 前言 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供…

OPPO后端二面,凉了!

这篇文章的问题来源于一个读者之前分享的 OPPO 后端凉经&#xff0c;我对比较典型的一些问题进行了分类并给出了详细的参考答案。希望能对正在参加面试的朋友们能够有点帮助&#xff01; Java String 为什么是不可变的? public final class String implements java.io.Seri…