Python用正则表达式从mysql建表语句提取字段信息,生成alter table modify columns语句

工作中遇到的,需要把两个数据库同一个表的字段修正成一致的,但是要求不能删表再重建,那样数据就没了,所以要对应字段写sql做修改

import re
import pandas as pd

#假设建表语句如下
s1 = """CREATE TABLE `develop_table` (
id int(5) NOT NULL auto_increment,
    content VARCHAR(100) COMMENT '内容',
    exec_time VARCHAR(50) COMMENT '执行时长',
    developer VARCHAR(100)  not null COMMENT '开发人员',
    tester VARCHAR(100) default 'system' COMMENT '测试人员',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY  (`id`)
)  ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COMMENT='开发内容表';"""

pat = re.compile(r"[\n](.*)[,]")
m = pat.findall(s1)
print(m)

#打印内容如下
# ['id int(5) NOT NULL auto_increment', "    content VARCHAR(100) COMMENT '内容'", "    exec_time VARCHAR(50) COMMENT '执行时长'", "    developer VARCHAR(100)  not null COMMENT '开发人员'", "    tester VARCHAR(100) default 'system' COMMENT '测试人员'", '    create_time DATETIME DEFAULT CURRENT_TIMESTAMP', '    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP']

#对每个字段写alter语句
table_name='develop_table'
sql = ["ALTER TABLE "+table_name +" MODIFY COLUMN "+i+";" for i in m]

print(sql)

#打印内容如下
# ['ALTER TABLE develop_table MODIFY COLUMN id int(5) NOT NULL auto_increment;', "ALTER TABLE develop_table MODIFY COLUMN     content VARCHAR(100) COMMENT '内容';", "ALTER TABLE develop_table MODIFY COLUMN     exec_time VARCHAR(50) COMMENT '执行时长';", "ALTER TABLE develop_table MODIFY COLUMN     developer VARCHAR(100)  not null COMMENT '开发人员';", "ALTER TABLE develop_table MODIFY COLUMN     tester VARCHAR(100) default 'system' COMMENT '测试人员';", 'ALTER TABLE develop_table MODIFY COLUMN     create_time DATETIME DEFAULT CURRENT_TIMESTAMP;', 'ALTER TABLE develop_table MODIFY COLUMN     update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;']
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值