主要有三种方式,根据你的需求来选择:

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_name
    run._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_COMMENT
        FROM information_schema.TABLES
        WHERE 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_COMMENT
        FROM information_schema.COLUMNS
        WHERE 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.CENTER

    for 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].cells
        for 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().cells
            values = [
                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文档效果:

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐