用Python生成MySql資料字典

2021-09-16 23:57:09 字數 2987 閱讀 7430

專案的資料庫字典表是乙個很重要的文件。通過此文件可以清晰的了解資料表結構及開發者的設計意圖。

通常為了方便我都是直接在資料庫中建表,然後通過工具匯出資料字典。

在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.ar**[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('\r\n')

f.close()

print 'generate markdown success!'

上面的執行結果會輸出 markdown 格式的檔案。

後面會寫一篇用python生成資料庫關係圖。

python生成回文數

python生成回文數 chyanog from itertools import product defpalindromenum n return n s tuple list i list i n n 1 2 n 1 1 1 for i in product range 1,10 range ...

用mysqlbinlog恢復MySQL資料庫

如果mysql 伺服器 啟用了二進位制日誌,你可以使用mysql binlog工具來恢復從指定的時間點開始 例如,從你最後一次備份 直到現在或另乙個指定的時間點的資料。關於啟用二進位制日誌的資訊,參見5.11.3節,二進位制日誌 對於 mysql binlog的詳細資訊,參見mysql手冊8.6節,...

python隨機數生成

python中的random模組用於生成隨機數。下面介紹一下random模組中最常用的幾個函式。random.random random.random 用於生成乙個0到1的隨機符點數 0 n 1.0 random.uniform random.uniform的函式原型為 random.uniform...