主要有三种方式,根据你的需求来选择:
1、Mysql语句查询
优点:无需安装额外的软件,使用你常用的数据库可视化工具即可
缺点:受限于你的数据库可视化工具的导出功能,需要额外写脚本进行处理
2、Python脚本
优点:可以完全自定义样式
缺点:需要额外安装配置Python
3、PDManer(推荐)
优点:直接生成能够满足大部分要求的数据库设计说明书,能根据模版自定义样式
缺点:需要额外安装PDManer,步骤多
建议:如果客户没有明确要求样式,使用PDManer即可满足交付任务
1、Mysql语句查询
可以使用Navicat和DBeaver等数据库可视化工具,我这里用的是DBeaver
查询SQL:
SELECT c.TABLE_NAME as '表名', -- 表名c.COLUMN_NAME as '列名', -- 列名c.COLUMN_TYPE as '数据类型', -- 列数据类型c.COLUMN_COMMENT as '注释', -- 列注释c.ORDINAL_POSITION as '排序', -- 列位置IF(k.COLUMN_NAME IS NOT NULL, '是', '否') AS '是否主键' -- 是否为主键
FROM INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN (SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE INDEX_NAME = 'PRIMARY' -- 只选择主键信息GROUP BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME) k ON c.TABLE_SCHEMA = k.TABLE_SCHEMA AND c.TABLE_NAME = k.TABLE_NAME AND c.COLUMN_NAME = k.COLUMN_NAME
WHERE c.TABLE_SCHEMA = 'database' -- 替换为您的数据库名
ORDER BY c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION;
使用自己的数据库可视化工具进行导出。
2、Python脚本
首先要先安装Python,可以自定义样式,可操控性强。
Python语句:
import pymysql
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn# 替换为你的数据库配置
db_config = {'host': '192.168.0.54','port': 3306,'user': 'root','password': 'password','database': 'crm','charset': 'utf8mb4'
}# 设置字体样式
def set_run_style(run, font_name='宋体', font_size=10.5, bold=False):run.font.name = font_namerun._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)run.font.size = Pt(font_size)run.bold = bold# 获取表结构信息
def fetch_table_structure(config):conn = pymysql.connect(**config)cursor = conn.cursor(pymysql.cursors.DictCursor)cursor.execute(f"""SELECT TABLE_NAME, TABLE_COMMENTFROM information_schema.TABLESWHERE TABLE_SCHEMA = %s AND TABLE_NAME NOT LIKE 'act%%'""", (config['database'],))tables = cursor.fetchall()cursor.execute(f"""SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, EXTRA, COLUMN_DEFAULT, COLUMN_COMMENTFROM information_schema.COLUMNSWHERE TABLE_SCHEMA = %s AND TABLE_NAME NOT LIKE 'act%%'ORDER BY TABLE_NAME, ORDINAL_POSITION""", (config['database'],))columns = cursor.fetchall()conn.close()table_map = {t['TABLE_NAME']: {'comment': t['TABLE_COMMENT'], 'columns': []} for t in tables}for col in columns:table_map[col['TABLE_NAME']]['columns'].append(col)return table_map# 生成 Word 文档
def generate_doc(table_map, file_path):doc = Document()title = doc.add_heading('', 0)run = title.add_run('数据库表结构文档')set_run_style(run, '黑体', 16, True)title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERfor table_name, table_info in table_map.items():# 表名标题heading = doc.add_heading('', level=1)run = heading.add_run(f"表名:{table_name}")set_run_style(run, '微软雅黑', 14, True)# 表注释para = doc.add_paragraph()run = para.add_run(f"表注释:{table_info['comment']}")set_run_style(run, '宋体', 11)# 表格结构table = doc.add_table(rows=1, cols=7)table.style = 'Light List Accent 1'headers = ['字段名', '数据类型', '是否可为空', '键类型', '默认值', '额外信息', '字段注释']hdr_cells = table.rows[0].cellsfor i, text in enumerate(headers):run = hdr_cells[i].paragraphs[0].add_run(text)set_run_style(run, '宋体', 10.5, True)for col in table_info['columns']:row = table.add_row().cellsvalues = [col['COLUMN_NAME'],col['COLUMN_TYPE'],col['IS_NULLABLE'],col['COLUMN_KEY'],str(col['COLUMN_DEFAULT']) if col['COLUMN_DEFAULT'] is not None else '',col['EXTRA'],col['COLUMN_COMMENT']]for i, val in enumerate(values):run = row[i].paragraphs[0].add_run(val)set_run_style(run, '宋体', 10.5)doc.add_paragraph() # 空行分隔表doc.save(file_path)print(f"✅ 已生成 Word 文档:{file_path}")# 执行
if __name__ == '__main__':table_data = fetch_table_structure(db_config)generate_doc(table_data, '数据库表结构文档_美观版.docx')
效果:
3、PDManer(推荐)
官网下载地址:
https://www.yonsum.com/Download
使用:
3.1 新建项目
3.2 PDManer连接数据库
步骤:
1、点击数据库
2、点击新增
3、填写数据库驱动连接信息
4、测试
5、成功后点确定
连接成功:
3.3 将数据库数据导入到PDManer
导入-》从数据库连接逆向解析
选择数据库:
选择需要操作的表:
导入:
结果:
3.4 将数据表导出成WORD文档
导出 -> 导出为WORD文档
选择导出模版:
PS:(不选默认为系统自带的模版,如需修改则下载文档模版再指定模版文件)
3.5 选择导出的表
没什么不能说的就直接全部导出,有什么不能说的那就~筛选导出~
工作流的表我就不导了。
word文档效果: