成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用Python生成MySql數(shù)據(jù)字典

張巨偉 / 1179人閱讀

摘要:項(xiàng)目的數(shù)據(jù)庫(kù)字典表是一個(gè)很重要的文檔。了解了生成數(shù)據(jù)字典的原理后看一下實(shí)現(xiàn)代碼字段名字段類型默認(rèn)值注解上面的執(zhí)行結(jié)果會(huì)輸出格式的文件。數(shù)據(jù)庫(kù)表名字段名字段類型默認(rèn)值注解后面會(huì)寫一篇用生成數(shù)據(jù)庫(kù)關(guān)系圖。

項(xiàng)目的數(shù)據(jù)庫(kù)字典表是一個(gè)很重要的文檔。通過(guò)此文檔可以清晰的了解數(shù)據(jù)表結(jié)構(gòu)及開(kāi)發(fā)者的設(shè)計(jì)意圖。
通常為了方便我都是直接在數(shù)據(jù)庫(kù)中建表,然后通過(guò)工具導(dǎo)出數(shù)據(jù)字典。

在Mysql數(shù)據(jù)庫(kù)中有一個(gè)information_schema庫(kù),它提供了訪問(wèn)數(shù)據(jù)庫(kù)元數(shù)據(jù)的方式。
什么是元數(shù)據(jù)呢?就是關(guān)于數(shù)據(jù)的數(shù)據(jù),如數(shù)據(jù)庫(kù)名、表名、列的數(shù)據(jù)類型、訪問(wèn)權(quán)限等。
SCHEMATA表:提供了當(dāng)前mysql實(shí)例中所有數(shù)據(jù)庫(kù)的信息。是show databases的結(jié)果取之此表。
TABLES表:提供了關(guān)于數(shù)據(jù)庫(kù)中的表的信息(包括視圖)。詳細(xì)表述了某個(gè)表屬于哪個(gè)schema,表類型,表引擎,創(chuàng)建時(shí)間等信息。
show tables from schemaname的結(jié)果取之此表。
COLUMNS表:提供了表中的列信息。詳細(xì)表述了某張表的所有列以及每個(gè)列的信息.
show columns from schemaname.tablename的結(jié)果取之此表。

了解了生成數(shù)據(jù)字典的原理后看一下實(shí)現(xiàn)代碼:

#!/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) 
    字段名 | 字段類型 | 默認(rèn)值 | 注解
    ---- | ---- | ---- | ---- 
    """
    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!"

上面的執(zhí)行結(jié)果會(huì)輸出 markdown 格式的文件。

數(shù)據(jù)庫(kù)表名
字段名 字段類型 默認(rèn)值 注解

后面會(huì)寫一篇用Python生成數(shù)據(jù)庫(kù)關(guān)系圖。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17596.html

相關(guān)文章

  • Python生成MySql數(shù)據(jù)字典

    摘要:項(xiàng)目的數(shù)據(jù)庫(kù)字典表是一個(gè)很重要的文檔。了解了生成數(shù)據(jù)字典的原理后看一下實(shí)現(xiàn)代碼字段名字段類型默認(rèn)值注解上面的執(zhí)行結(jié)果會(huì)輸出格式的文件。數(shù)據(jù)庫(kù)表名字段名字段類型默認(rèn)值注解后面會(huì)寫一篇用生成數(shù)據(jù)庫(kù)關(guān)系圖。 項(xiàng)目的數(shù)據(jù)庫(kù)字典表是一個(gè)很重要的文檔。通過(guò)此文檔可以清晰的了解數(shù)據(jù)表結(jié)構(gòu)及開(kāi)發(fā)者的設(shè)計(jì)意圖。通常為了方便我都是直接在數(shù)據(jù)庫(kù)中建表,然后通過(guò)工具導(dǎo)出數(shù)據(jù)字典。 在Mysql數(shù)據(jù)庫(kù)中有一個(gè)i...

    dmlllll 評(píng)論0 收藏0
  • 如何python的pymysql操作MySQL數(shù)據(jù)庫(kù)?

    摘要:一介紹是在版本中用于連接和操作服務(wù)器的一個(gè)庫(kù)引入方式二連接數(shù)據(jù)庫(kù)的完整流程引入模塊引入第三方庫(kù)創(chuàng)建連接對(duì)象用戶名密碼端口號(hào)默認(rèn)為且此處為整數(shù)類型數(shù)據(jù)庫(kù)名連接地址使用連接對(duì)象創(chuàng)建游標(biāo)對(duì)象游標(biāo)對(duì)象是通過(guò)鏈接對(duì)象進(jìn)行創(chuàng) ...

    Keagan 評(píng)論0 收藏0
  • Python 爬蟲面試題 170 道:2019 版

    摘要:下面代碼會(huì)存在什么問(wèn)題,如何改進(jìn)一行代碼輸出之間的所有偶數(shù)。簡(jiǎn)述進(jìn)程之間如何通信多路復(fù)用的作用模型的區(qū)別什么是并發(fā)和并行解釋什么是異步非阻塞的作用面試題說(shuō)說(shuō)你知道的命令如何查看某次提交修改的內(nèi)容答案掃碼下面的二維碼訂閱即可獲取。 引言 最近在刷面試題,所以需要看大量的 Python 相關(guān)的面試題,從大量的題目中總結(jié)了很多的知識(shí),同時(shí)也對(duì)一些題目進(jìn)行拓展了,但是在看了網(wǎng)上的大部分面試題不...

    trigkit4 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<