资讯专栏INFORMATION COLUMN

用Python生成MySql数据字典

张巨伟 / 1142人阅读

摘要:项目的数据库字典表是一个很重要的文档。了解了生成数据字典的原理后看一下实现代码字段名字段类型默认值注解上面的执行结果会输出格式的文件。数据库表名字段名字段类型默认值注解后面会写一篇用生成数据库关系图。

项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。
通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。

在Mysql数据库中有一个information_schema库,它提供了访问数据库元数据的方式。
什么是元数据呢?就是关于数据的数据,如数据库名、表名、列的数据类型、访问权限等。
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。
show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息.
show columns from schemaname.tablename的结果取之此表。

了解了生成数据字典的原理后看一下实现代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

import mysql.connector as mysql
import sys
import getopt
reload(sys)
sys.setdefaultencoding("utf8")


def usage():
    print "help:"
    print "--host db server,default localhost"
    print "--port db port,default 3306"
    print "--user db username,default root"
    print "--password db password,default blank"
    print "--database db name"
    print "--output markdown output file,default current path"

if __name__ == "__main__":
    try:
        opts,args = getopt.getopt(sys.argv[1:],"h",["help","host=","port=","database=","user=","password=","output="])
    except getopt.GetoptError:
        sys.exit()
    if "help" in args:
        usage()
        sys.exit()
        print opts
    host = "localhost"
    user = "root"
    password = ""
    database = ""
    port = 3306
    output = "./markdown.out"

    for op,value in opts:
        if op == "--host":
            host = value
        elif op == "--port":
            port = value
        elif op == "--database":
            database = value
        elif op == "--user":
            user = value
        elif op == "--password":
            password = value
        elif op == "--output":
            output = value
        elif op == "-h":
            usage()
            sys.exit()
        if database == "":
            usage()
        #    sys.exit()
    conn = mysql.connect(host=host,port=port,user=user,password=password,database="information_schema")
    cursor = conn.cursor()
    cursor.execute("select table_name,table_comment from information_schema.tables where table_schema="%s" and table_type="base table"" % database)
    tables = cursor.fetchall()
    
    markdown_table_header = """### %s (%s) 
    字段名 | 字段类型 | 默认值 | 注解
    ---- | ---- | ---- | ---- 
    """
    markdown_table_row = """%s | %s | %s | %s
    """
    f = open(output,"w")
    for table in tables:
        cursor.execute("select COLUMN_NAME,COLUMN_TYPE,COLUMN_DEFAULT,COLUMN_COMMENT from information_schema.COLUMNS where table_schema="%s" and table_name="%s""% (database,table[0]))
        tmp_table = cursor.fetchall()
        p = markdown_table_header % table;
        for col in tmp_table:
            p += markdown_table_row % col
        f.writelines(p)
        f.writelines("
")
    f.close()
    print "generate markdown success!"

上面的执行结果会输出 markdown 格式的文件。

数据库表名
字段名 字段类型 默认值 注解

后面会写一篇用Python生成数据库关系图。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17596.html

相关文章

  • Python生成MySql数据字典

    摘要:项目的数据库字典表是一个很重要的文档。了解了生成数据字典的原理后看一下实现代码字段名字段类型默认值注解上面的执行结果会输出格式的文件。数据库表名字段名字段类型默认值注解后面会写一篇用生成数据库关系图。 项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。 在Mysql数据库中有一个i...

    dmlllll 评论0 收藏0
  • 如何python的pymysql操作MySQL数据库?

    摘要:一介绍是在版本中用于连接和操作服务器的一个库引入方式二连接数据库的完整流程引入模块引入第三方库创建连接对象用户名密码端口号默认为且此处为整数类型数据库名连接地址使用连接对象创建游标对象游标对象是通过链接对象进行创 ...

    Keagan 评论0 收藏0
  • Python 爬虫面试题 170 道:2019 版

    摘要:下面代码会存在什么问题,如何改进一行代码输出之间的所有偶数。简述进程之间如何通信多路复用的作用模型的区别什么是并发和并行解释什么是异步非阻塞的作用面试题说说你知道的命令如何查看某次提交修改的内容答案扫码下面的二维码订阅即可获取。 引言 最近在刷面试题,所以需要看大量的 Python 相关的面试题,从大量的题目中总结了很多的知识,同时也对一些题目进行拓展了,但是在看了网上的大部分面试题不...

    trigkit4 评论0 收藏0

发表评论

0条评论

张巨伟

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<