專案的資料庫字典表是乙個很重要的文件。通過此文件可以清晰的了解資料表結構及開發者的設計意圖。
通常為了方便我都是直接在資料庫中建表,然後通過工具匯出資料字典。
在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...