如何使用Python3导出MySQL数据库字典

这教程有什么用?

想一下,当你的数据库有几百张表的时候,表结构的管理变得异常的困难,或者公司需要你来维护这些表结构,我们不可能人工去一个个检查是否有更新吧。所以通过脚本导出数据库里所有表的字段极为重要。

准备工作

安装Python3(如何安装的教程已经烂大街,请自行百度)

确保pip正常工作(如果pip不工作,试试python -m ensurepip)

使用pip安装pymysql

使用pip安装python-docx

安装MySQL(推荐使用xampp,自带MySQL了,当然既然都看到这个教程,代表你已经安装了MySQL)

Python编辑器(目前较常用的有Pycharm,sublime,vscode,anaconda里的jupyter notebook等,以及Python自带的IDLE,或者直接命令行启动。萝卜青菜各有所爱,看大家喜欢哪个了)

先看看效果图

做个小小的解释:

蓝色字体的是表的名称,尾随的是字段的数量

表格里就是具体的字段描述了。

开始进入正题

此次我使用但是Python自带的IDLE编辑器(windows10可直接在左下角搜索IDLE)

如下图所示,机器不同可能结果不一样,我这里用的是32位的

点击打开IDLE,默认是交互模式

为了方便记录代码,点击file,new file 并保存文件。我这里保存为export_dictionary.py

撸代码

# 导入所需的库

import pymysql

import os

import docx

# 连接MySQL数据库查询数据,刚安装的#MySQL默认是root,密码为空

conn = pymysql.connect(host='127.0.0.1',

port=3306,

user='root',

passwd='',

db='mysql',

charset='utf8')

# 创建一个游标来操作数据库

cursor = conn.cursor()

# 构造一个查询SQL语句字符串,并执行

sql =

"""select

TABLE_NAME as "表名",

COLUMN_NAME as "字段名",

COLUMN_TYPE as "类型",

COLUMN_COMMENT as "说明" from information_schema.columns where TABLE_SCHEMA='mysql'"""

cursor.execute(sql)

# 执行之后,就可以获取所有的查询记录

rows = cursor.fetchall()

# 接下来我们print rows,得到数据集,每个记录# 是元组

# 可以看得出来,每个元组已经包含了表名,字

# 段名,类型和说明了,接下来我们把这些数据

# 构造成一个dict,它的结构如下

data_dict = {

"表名":[字段字典,字段字典],

"表名2":[字段字典,字段字典],

}

# 构造字典,是为了方便结构化数据,并导出到

# doc文档中。以下是构造一个字典,遍历记集

# 一开始先拿到row[0],这是表名,我们先用get的方法查询data_dict是否已经有表名了,如果没有就update一个表名字典,然后它的指设为空列表,用来装字段字典,columns就是具体的字段字典,生成后就append到该表名的字典里

data_dict = dict()

for row in rows:

name = row[0]

if data_dict.get(name) is None:

data_dict.update()

field = row[1]

dtype = row[2]

description = row[3]

columns = dict(表名=name,字段=field,类型=dtype,描述=description)

data_dict[name].append(columns)

# 按F5运行之后,会得到以下结果,可以看出是# 一个字典(啰嗦了,本来就是来构造字典的)

# 接下来我们可以把这些数据写入到doc文件中

# 了,直接上代码,table.save("tables.docx"),

# 默认是脚本运行的路径,保存之后会看到。

doc = docx.Document()

for key,values in data_dict.items():

doc.add_heading(key+f"()")

table = doc.add_table(rows=1,cols=4,style='Table Grid')

header = table.rows[0]

header.cells[0].text = "序号"

header.cells[1].text = "字段名"

header.cells[2].text = "类型"

header.cells[3].text = "描述"

for index,item in enumerate(values,1):

row = table.add_row()

row.cells[0].text = str(index)

row.cells[1].text = item.get("字段")

row.cells[2].text = item.get("类型")

row.cells[3].text = item.get("描述")

doc.save('tables.docx')

最后的结果如下

最后附上完整代码

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180419G0P0IQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券