工作中遇到的,需要把两个数据库同一个表的字段修正成一致的,但是要求不能删表再重建,那样数据就没了,所以要对应字段写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;']