使用python-docx模塊進行word數據操作
安裝模塊: pip install python-docx
---------實例代碼---------------
# -*- coding: utf-8 -*-
"""
@Author TangJing
@Date 2021/3/1 12:02
@Describe
@Version 1.0
"""
import pymysql
from docx import Document
# 待導出的數據庫信息
pm = {
# ip地址
'host': ['192.168.1.132', '192.168.1.132', '192.168.1.151'],
# 端口號
'port': [3306, 3306, 3306],
# 用戶名
'user': ['root', 'root', 'root'],
# 密碼
'passwd': ['123456', '123456', '123456'],
# 數據庫編碼
'charset': ['utf8', 'utf8', 'utf8'],
# 數據庫名稱
'db': ['smart_checkpoint_cd', 'smart_defense_circle', 'qy_temp'],
# 存儲的文件名稱
'filename': [u'檢查站數據庫表結構', u'防空圈數據庫表結構', u'真我數據庫表結構']
}
def connMysql(pa):
"""
創建數據庫連接
:return: 數據庫連接(db)
"""
# 數據庫連接
try:
db = pymysql.connect(
host=pa[0],
port=int(pa[1]),
user=pa[2],
passwd=pa[3].strip(),
charset=pa[4],
db=pa[5],
)
return db
except Exception as e:
print(e)
return "null"
def query(pm, sql):
"""
根據sql進行查詢,並返回所有查詢結果
:param sql: 查詢語句
:return: 查詢結果
"""
db = connMysql(pm)
cursor = db.cursor()
cursor.execute(sql)
data = cursor.fetchall()
cursor.close()
db.close()
return data
def get_word(document, data, *args, **kwargs):
"""
插入數據到word中
:param document: 文檔對象
:param data: 數據包
:param args: 文檔標題(元組類型)
:param kwargs:
:return:
"""
# 加入標題
document.add_heading(str(args[0] + '-' + args[1]), 1)
# 增加表格
table = document.add_table(rows=1, cols=4, style='Medium Grid 1 Accent 1')
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '字段名稱'
hdr_cells[1].text = '數據類型'
hdr_cells[2].text = '是否必填'
hdr_cells[3].text = '注釋'
# 增加表格行元素
for filds in data:
row_cells = table.add_row().cells
for i in range(4):
row_cells[i].text = filds[i]
if __name__ == '__main__':
print('數據導出中...')
for i in range(len(pm['host'])):
document = Document()
document.add_heading(pm['filename'][i], 0)
sql_table = r"SELECT table_name 表名, table_comment 表說明 FROM information_schema.TABLES WHERE table_schema = '{}' ORDER BY table_name".format(
pm['db'][i])
# 查詢當前庫下所有表信息
pa = (
pm['host'][i], pm['port'][i], pm['user'][i], pm['passwd'][i], pm['charset'][i], pm['db'][i],
pm['filename'][i])
tables_info = query(pa, sql_table)
for tab in tables_info:
sql_fild = "SELECT COLUMN_NAME 字段名稱, COLUMN_TYPE 數據類型, IF(IS_NULLABLE='NO','是','否') AS '必填', COLUMN_COMMENT 注釋 FROM INFORMATION_SCHEMA.COLUMNS where table_schema ='{}' AND table_name = '{}'".format(
pm['db'][i], tab[0])
# 查詢當前表下所有字段信息
filds_info = query(pa, sql_fild)
# 將當前表字段信息插入到word中
get_word(document, filds_info, tab[0], tab[1])
document.save(pm['filename'][i] + '.docx')
print('導出完成.')