工具類-使用python導出數據庫多表結構到Excel

使用python導出數據庫多表結構到Excel

把數據庫表結構導出來,方便使用或者提供表結構文檔

#!/usr/bin/python3

import pymysql
import xlwt

# 要連接的數據庫信息
db_ip = '10.1.120.95'
db_port = 13362
db_user_name = 'root'
db_password = '123456'
db_name = 'information_schema'

# 要查詢的數據庫名和表名
search_db_name = '數據庫名'
search_table_names = ['tb1','tb2','tb3']


# 連接數據庫
db = pymysql.connect(host=db_ip, port=db_port, user=db_user_name, passwd=db_password,db=db_name)

#新建一個excel
book = xlwt.Workbook()
#添加一個sheet頁
sheet = book.add_sheet('table_schema')

line = 0#控制行

#設置某列的單元格寬度
sheet.col(0).width = 8000
sheet.col(1).width = 4500
sheet.col(2).width = 3000
sheet.col(3).width = 2200
sheet.col(4).width = 2500
sheet.col(5).width = 2000
sheet.col(6).width = 10000

for search_table_name in search_table_names:
    # 拼接sql
    sql =  "SELECT \
                column_name,column_comment,data_type,character_maximum_length,is_nullable,column_default,column_type \
            FROM \
                columns \
            where \
                table_schema =" + "'" + search_db_name + "'" +\
            "AND \
                table_name=" + "'" + search_table_name + "'" 

    # 輸出數據表名
    title_style = xlwt.XFStyle()#初始化樣式
    title_font = xlwt.Font()#創建字體
    title_font.name = u'微軟雅黑' #字體類型
    title_font.height = 280    #字體大小   200等於excel字體大小中的10
    title_style.font = title_font   #設定樣式
    sheet.write_merge(line,line,0,6,search_table_name,title_style)
    line+=1

    # 字段名的中文描述
    des_style = xlwt.XFStyle()#初始化樣式
    des_font = xlwt.Font()#創建字體
    des_font.name = u'宋體' #字體類型
    des_font.height = 240    #字體大小   200等於excel字體大小中的10
    des_style.font = des_font   #設定樣式
    description = ['列名','備註','字段類型','長度','是否爲空','默認值','數據類型']
    des_col = 0
    for des in description:
        sheet.write(line,des_col,des,des_style)
        des_col+=1
    line+=1

    try:
        cursor = db.cursor()
        cursor.execute(sql)
        results = cursor.fetchall()
        # 輸出字段的信息
        content_style = xlwt.XFStyle()#初始化樣式
        content_font = xlwt.Font()#創建字體
        content_font.name = u'微軟雅黑' #字體類型
        content_font.height = 240    #字體大小   200等於excel字體大小中的10
        content_style.font = content_font   #設定樣式

        for row in results:
            col = 0#控制列
            for s in row:#再循環裏面list的值,每一列
                sheet.write(line,col,s,content_style)
                col+=1
            line+=1
        
        for i in [0,1,2,3,4,5,6]:
            sheet.write(line,i,'')
        line+=1
        
        for i in [0,1,2,3,4,5,6]:
            sheet.write(line,i,'')
        line+=1

    except Exception as e:
        print(e)
        print ("Error: unable to fetch data")

book.save('C:/Users/python/tables.xls')#保存到當前目錄下

db.close()

 

每天努力一點,每天都在進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章