用python生成mysql數(shù)據(jù)庫結(jié)構(gòu)文檔
最近因為項目原因需要編寫數(shù)據(jù)庫設(shè)計文檔,但是由于數(shù)據(jù)表太多,手動編寫耗費的時間太久,所以搞了一個簡單的腳本快速生成數(shù)據(jù)庫結(jié)構(gòu),保存到word文檔中。
安裝pymysql和document
pip install pymysql pip install document
腳本
# -*- coding: utf-8 -*-
import pymysql
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
db = pymysql.connect(host='127.0.0.1', #數(shù)據(jù)庫服務(wù)器IP
port=3306,
user='root',
passwd='123456',
db='test_db') #數(shù)據(jù)庫名稱)
#根據(jù)表名查詢對應(yīng)的字段相關(guān)信息
def query(tableName):
#打開數(shù)據(jù)庫連接
cur = db.cursor()
sql = "select b.COLUMN_NAME,b.COLUMN_TYPE,b.COLUMN_COMMENT from (select * from information_schema.`TABLES` where TABLE_SCHEMA='test_db') a right join(select * from information_schema.`COLUMNS` where TABLE_SCHEMA='test_db_test') b on a.TABLE_NAME = b.TABLE_NAME where a.TABLE_NAME='" + tableName+"'"
cur.execute(sql)
data = cur.fetchall()
cur.close
return data
#查詢當(dāng)前庫下面所有的表名,表名:tableName;表名+注釋(用于填充至word文檔):concat(TABLE_NAME,'(',TABLE_COMMENT,')')
def queryTableName():
cur = db.cursor()
sql = "select TABLE_NAME,concat(TABLE_NAME,'(',TABLE_COMMENT,')') from information_schema.`TABLES` where TABLE_SCHEMA='test_db_test'"
cur.execute(sql)
data = cur.fetchall()
return data
#將每個表生成word結(jié)構(gòu),輸出到word文檔
def generateWord(singleTableData,document,tableName):
p=document.add_paragraph()
p.paragraph_format.line_spacing=1.5 #設(shè)置該段落 行間距為 1.5倍
p.paragraph_format.space_after=Pt(0) #設(shè)置段落 段后 0 磅
#document.add_paragraph(tableName,style='ListBullet')
r=p.add_run('\n'+tableName)
r.font.name=u'宋體'
r.font.size=Pt(12)
table = document.add_table(rows=len(singleTableData)+1, cols=3,style='Table Grid')
table.style.font.size=Pt(11)
table.style.font.name=u'Calibri'
#設(shè)置表頭樣式
#這里只生成了三個表頭,可通過實際需求進行修改
for i in ((0,'NAME'),(1,'TYPE'),(2,'COMMENT')):
run = table.cell(0,i[0]).paragraphs[0].add_run(i[1])
run.font.name = 'Calibri'
run.font.size = Pt(11)
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
for i in range(len(singleTableData)):
#設(shè)置表格內(nèi)數(shù)據(jù)的樣式
for j in range(len(singleTableData[i])):
run = table.cell(i+1,j).paragraphs[0].add_run(singleTableData[i][j])
run.font.name = 'Calibri'
run.font.size = Pt(11)
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
#table.cell(i+1, 0).text=singleTableData[i][1]
#table.cell(i+1, 1).text=singleTableData[i][2]
#table.cell(i+1, 2).text=singleTableData[i][3]
if __name__ == '__main__':
#定義一個document
document = Document()
#設(shè)置字體默認樣式
document.styles['Normal'].font.name = u'宋體'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')
#獲取當(dāng)前庫下所有的表名信息和表注釋信息
tableList = queryTableName()
#循環(huán)查詢數(shù)據(jù)庫,獲取表字段詳細信息,并調(diào)用generateWord,生成word數(shù)據(jù)
#由于時間匆忙,我這邊選擇的是直接查詢數(shù)據(jù)庫,執(zhí)行了100多次查詢,可以進行優(yōu)化,查詢出所有的表結(jié)構(gòu),在代碼里面將每個表結(jié)構(gòu)進行拆分
for singleTableName in tableList:
data = query(singleTableName[0])
generateWord(data,document,singleTableName[1])
#保存至文檔
document.save('數(shù)據(jù)庫設(shè)計.docx')
生成的word文檔預(yù)覽

到此這篇關(guān)于用python生成mysql數(shù)據(jù)庫結(jié)構(gòu)文檔的文章就介紹到這了,更多相關(guān)python生成mysql結(jié)構(gòu)文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python TF-IDF算法實現(xiàn)文本關(guān)鍵詞提取
這篇文章主要為大家詳細介紹了python TF-IDF算法實現(xiàn)文本關(guān)鍵詞提取,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05
Python基礎(chǔ)學(xué)習(xí)列表+元組+字典+集合
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)列表+元組+字典+集合,文章接上一篇內(nèi)容學(xué)習(xí),主要針對python零基礎(chǔ)的同學(xué),感興趣的話就學(xué)起來吧2022-05-05
Python實現(xiàn)批量生成,重命名和刪除word文件
這篇文章主要為大家詳細介紹了Python如何利用第三方庫實現(xiàn)批量生成、重命名和刪除word文件的功能,文中的示例代碼講解詳細,需要的可以參考一下2023-03-03
Python實現(xiàn)的在特定目錄下導(dǎo)入模塊功能分析
這篇文章主要介紹了Python實現(xiàn)的在特定目錄下導(dǎo)入模塊功能,結(jié)合實例形式分析了Python基于系統(tǒng)函數(shù)及import語句實現(xiàn)模塊導(dǎo)入的相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
Django csrf 兩種方法設(shè)置form的實例
今天小編就為大家分享一篇Django csrf 兩種方法設(shè)置form的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
python下函數(shù)參數(shù)的傳遞(參數(shù)帶星號的說明)
python中函數(shù)參數(shù)的傳遞是通過賦值來傳遞的。2010-09-09
python使用cStringIO實現(xiàn)臨時內(nèi)存文件訪問的方法
這篇文章主要介紹了python使用cStringIO實現(xiàn)臨時內(nèi)存文件訪問的方法,涉及Python使用cStringIO模塊操作內(nèi)存的技巧,需要的朋友可以參考下2015-03-03

