利用Python将数据库建表语句转成表格的形式(可以大幅提高书写数据库设计文档的效率)
一、遇到的问题
相信很多程序员都书写过数据库设计文档,里面往往需要给出该软件系统涉及到的所有数据库表的信息。如果是采用手动的一个个复制所有表的所有字段信息到word文档的表格中去,那一定是一件非常痛苦的事,费时且费力。上网搜索了一下也没有找到合适的解决方案,以下是我提供的两种解决方案,特此记录与大家分享。
二、解决方案
方案一
拿到建表语句,利用word自带的文字转表格的功能来处理。具体步骤大家可以自行百度搜索一下,这里不展开说了。但这种方式需要对每一条建表语句做处理,构造成一定的格式才能转,依然不是很方便。
方案二
思路:
首先也是拿到建表语句,然后获取每一个字段中想要的信息,构造出一个二维列表来,其中一行代表一个字段,每一列代表了字段的相关信息,比如数据类型、长度等等。然后将这个二维列表写入到一个Excel文件中,最后就可以直接将内容复制粘贴到word的表格中去了。
代码:
【注】这段代码不需要其他第三方库的支持。
ddl = """`ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`MERCHANT_NAME` varchar(50) DEFAULT NULL COMMENT '商户名称',
`MERCHANT_NO` varchar(32) DEFAULT NULL COMMENT '企业编号',
`MERCHANT_ADDRESS` varchar(255) DEFAULT NULL COMMENT '企业地址',
`MERCHANT_TYPE` varchar(50) DEFAULT NULL COMMENT '商户类型',
`BUSINESS_LICENSES_IMG` varchar(100) DEFAULT NULL COMMENT '营业执照(企业证明)',
`ID_CARD_FRONT_IMG` varchar(100) DEFAULT NULL COMMENT '法人身份证正面照片',
`ID_CARD_AFTER_IMG` varchar(100) DEFAULT NULL COMMENT '法人身份证反面照片',
`USERNAME` varchar(50) DEFAULT NULL COMMENT '联系人姓名',
`MOBILE` varchar(50) DEFAULT NULL COMMENT '联系人手机号(关联统一账号)',
`CONTACTS_ADDRESS` varchar(255) DEFAULT NULL COMMENT '联系人地址',
`AUDIT_STATUS` varchar(20) DEFAULT NULL COMMENT '审核状态。0-未申请,1-已申请待审核,2-审核通过,3-审核拒绝',
`TENANT_ID` bigint(20) DEFAULT NULL COMMENT '租户ID,关联统一用户',"""
# 表头
result = [['序号', '列名', '数据类型', '长度', '允许空', '说明']]
# 将语句按行拆分成一个列表
spam = ddl.split('\n')
for i in range(len(spam)):
s = spam[i]
s = s.strip() # 删除字符串两边的空白字符
s = s.replace('NOT NULL AUTO_INCREMENT COMMENT', '否') # 允许空设为否
s = s.replace('DEFAULT NULL COMMENT', '是') # 允许空设为是
# 长度
s = s.replace('(', ' ')
s = s.replace(')', '')
# 去除`和'以及行尾的,
s = s.replace('`', '')
s = s.replace("'", '')
s = s.replace(',', '')
temp = s.split(' ') # 将每一行再按空格拆分成一个列表
temp.insert(0, str(i + 1)) # 设置序号
result.append(temp) # 构建二维列表
# 构建二维列表完毕,准备写入Excel文件中。当然前提是得先创建一个Excel文档,这里我是在D盘下创建了一个名为out.xlsx的Excel文档。
output = open('D:\\out.xlsx', 'w', encoding='gbk')
for i in range(len(result)):
for j in range(len(result[i])):
output.write(result[i][j])
output.write('\t') # 相当于Tab一下,换一个单元格
output.write('\n') # 写完一行立马换行
output.close()
效果:
方案三
https://blog.csdn.net/weixin_29643235/article/details/113119684
三、感悟
作为一个程序员要时刻以程序员的思维来思考问题,编程的目的就是为了让繁琐工作自动化。