zoukankan      html  css  js  c++  java
  • 利用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('
    ')
    
    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('	')  # 相当于Tab一下,换一个单元格
        output.write('
    ')  # 写完一行立马换行
    output.close()
    

    效果:

    方案三

    https://blog.csdn.net/weixin_29643235/article/details/113119684

    三、感悟

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

  • 相关阅读:
    LeetCode算法题-Find Pivot Index(Java实现)
    LeetCode算法题-Longest Word in Dictionary(Java实现)
    LeetCode算法题-1-bit and 2-bit Characters(Java实现)
    2016-8-4学习正则表达式
    doT 这个模板 是怎么实现的?
    manually Invoking Model Binding / Model Binding /Pro asp.net mvc 5
    隐隐约约 听 RazorEngine 在 那里 据说 生成代码 很 美。
    web api 的 安全 认证问题 , 对外开放 的 时候 需要考虑到安全的问题
    鼠标滑过显示图片
    页面加载中效果实现
  • 原文地址:https://www.cnblogs.com/jiajun107/p/14939363.html
Copyright © 2011-2022 走看看