您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么用python生成mysql數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
因?yàn)轫?xiàng)目原因需要編寫數(shù)據(jù)庫(kù)設(shè)計(jì)文檔,但是由于數(shù)據(jù)表太多,手動(dòng)編寫耗費(fèi)的時(shí)間太久,所以搞了一個(gè)簡(jiǎn)單的腳本快速生成數(shù)據(jù)庫(kù)結(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ù)庫(kù)服務(wù)器IP port=3306, user='root', passwd='123456', db='test_db') #數(shù)據(jù)庫(kù)名稱) #根據(jù)表名查詢對(duì)應(yīng)的字段相關(guān)信息 def query(tableName): #打開(kāi)數(shù)據(jù)庫(kù)連接 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)前庫(kù)下面所有的表名,表名: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 #將每個(gè)表生成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è)置表頭樣式 #這里只生成了三個(gè)表頭,可通過(guò)實(shí)際需求進(jìn)行修改 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__': #定義一個(gè)document document = Document() #設(shè)置字體默認(rèn)樣式 document.styles['Normal'].font.name = u'宋體' document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體') #獲取當(dāng)前庫(kù)下所有的表名信息和表注釋信息 tableList = queryTableName() #循環(huán)查詢數(shù)據(jù)庫(kù),獲取表字段詳細(xì)信息,并調(diào)用generateWord,生成word數(shù)據(jù) #由于時(shí)間匆忙,我這邊選擇的是直接查詢數(shù)據(jù)庫(kù),執(zhí)行了100多次查詢,可以進(jìn)行優(yōu)化,查詢出所有的表結(jié)構(gòu),在代碼里面將每個(gè)表結(jié)構(gòu)進(jìn)行拆分 for singleTableName in tableList: data = query(singleTableName[0]) generateWord(data,document,singleTableName[1]) #保存至文檔 document.save('數(shù)據(jù)庫(kù)設(shè)計(jì).docx')
生成的word文檔預(yù)覽
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么用python生成mysql數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。