利用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

三、感悟

作为一个程序员要时刻以程序员的思维来思考问题,编程的目的就是为了让繁琐工作自动化。

posted @ 2021-06-26 22:18  Java程序员的进阶之路  阅读(818)  评论(0编辑  收藏  举报