在日常开发中,数据库说明文档是项目交付、团队协作的核心文档之一,但手动编写不仅耗时,还容易遗漏字段注释、表关系等关键信息。本文将分享一套基于 Python + 阿里云百炼 AI的自动化方案:自动读取 MySQL 表结构,调用 AI 生成业务化说明,最终输出规范的 Word 格式数据库文档,彻底告别手动编写!
一、核心功能
- 自动连接 MySQL 数据库,批量读取所有表 / 字段元数据(字段名、类型、注释、主键等);
- 对接阿里云百炼(通义千问)AI,智能生成表的业务含义说明;
- 自动输出带格式、带表格的 Word(.docx)文档,无需手动排版;
- 兼容 MySQL 8.0 + 版本,解决认证 / 连接兼容性问题。
二、环境准备
1. 安装依赖库
bash
运行
# 数据库连接
pip install pymysql
# AI接口调用
pip install requests
# Word文档生成
pip install python-docx
# 环境变量管理(可选)
pip install python-dotenv
2. 阿里云百炼 API 准备
- 访问阿里云百炼控制台,登录后在「API-KEY 管理」中创建并复制 API Key;
- 确保 API Key 有足够的调用额度(免费额度足够测试使用)。
3. MySQL 环境确认
- 确认 MySQL 服务已启动,端口 / 账号 / 密码可正常访问;
三、完整实现代码
1. 核心代码(直接复用)
python
运行
import os
import pymysql
import requests
import json
from dotenv import load_dotenv
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
# 加载环境变量
load_dotenv()
# ===================== 配置项(改这里) =====================
CONFIG = {
"db": {
"host": "127.0.0.1", # 本地库优先填127.0.0.1,避免localhost解析问题
"port": 3306,
"user": "root", # 你的MySQL用户名
"password": "你的MySQL密码", # 你的MySQL密码
"database": "你的数据库名", # 要生成文档的数据库名
"charset": "utf8mb4"
},
"ali": {
"api_key": "你的阿里云百炼API Key",
"model": "qwen-turbo"
},
"docs": {
"output_file": "数据库说明文档.docx" # 输出doc格式(docx兼容所有Word版本)
}
}
# ==================================================================
class AliDBDocGenerator:
def __init__(self, config):
self.config = config
self.db_conn = None
self.cursor = None
# 初始化Word文档
self.doc = Document()
# 设置Word全局字体(解决中文乱码)
self._set_doc_font()
def _set_doc_font(self):
"""设置Word文档字体,避免中文乱码"""
style = self.doc.styles['Normal']
style.font.name = '微软雅黑'
style._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
def connect(self):
self.db_conn = pymysql.connect(**self.config["db"])
self.cursor = self.db_conn.cursor()
print("✅ 数据库连接成功")
def get_tables(self):
"""获取数据库所有表名"""
self.cursor.execute("SHOW TABLES")
return [t[0] for t in self.cursor.fetchall()]
def get_table_info(self, table):
"""获取单表完整结构"""
# 查询字段信息
sql = """
SELECT
COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT, COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s
"""
self.cursor.execute(sql, (self.config["db"]["database"], table))
rows = self.cursor.fetchall()
fields = []
for r in rows:
fields.append({
"字段名": r[0],
"类型": r[1],
"可为空": "是" if r[2] == "YES" else "否",
"默认值": r[3] if r[3] else "无",
"注释": r[4] if r[4] else "无",
"键": "主键" if r[5] == "PRI" else "无"
})
# 查询表注释
self.cursor.execute("""
SELECT TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s
""", (self.config["db"]["database"], table))
comment = self.cursor.fetchone()[0] or "无"
return {
"表名": table,
"表注释": comment,
"字段": fields
}
def call_ali_ai(self, table_info):
"""调用阿里云百炼AI生成表说明"""
url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"
headers = {
"Authorization": f"Bearer {self.config['ali']['api_key']}",
"Content-Type": "application/json"
}
# 优化Prompt,让AI输出结构化内容(适配Word排版)
prompt = f"""
你是专业DBA,请根据以下数据库表结构,生成清晰的表说明(纯文本,不要markdown格式):
1. 第一行输出「表名:XXX(表注释)」
2. 第二行输出「业务含义:XXX」
3. 第三行开始输出字段说明(每行格式:字段名-类型-可为空-默认值-键-注释)
表结构:
{json.dumps(table_info, ensure_ascii=False, indent=2)}
"""
data = {
"model": self.config["ali"]["model"],
"input": {"prompt": prompt}
}
try:
resp = requests.post(url, json=data, headers=headers, timeout=30)
result = resp.json()
return result["output"]["text"].strip()
except Exception as e:
return f"表名:{table_info['表名']}\n业务含义:生成失败\n错误:{str(e)}"
def add_table_to_doc(self, table_info, ai_desc):
"""将单表信息添加到Word文档"""
# 1. 添加表标题
title = self.doc.add_heading(level=1)
title_run = title.add_run(f"{table_info['表名']} - {table_info['表注释']}")
title_run.font.size = Inches(0.2)
title.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
# 2. 添加AI生成的业务说明
desc_para = self.doc.add_paragraph()
desc_para.add_run("业务含义:").bold = True
desc_para.add_run(ai_desc.split("业务含义:")[-1].split("\n")[0].strip())
# 3. 创建字段表格(6列:字段名/类型/可为空/默认值/键/注释)
fields = table_info["字段"]
table = self.doc.add_table(rows=1, cols=6)
table.style = 'Table Grid' # 带边框的表格
# 设置表头
hdr_cells = table.rows[0].cells
hdr_texts = ["字段名", "数据类型", "是否可为空", "默认值", "键类型", "字段注释"]
for i, text in enumerate(hdr_texts):
hdr_cells[i].text = text
# 表头加粗
for paragraph in hdr_cells[i].paragraphs:
for run in paragraph.runs:
run.bold = True
# 填充字段数据
for field in fields:
row_cells = table.add_row().cells
row_cells[0].text = field["字段名"]
row_cells[1].text = field["类型"]
row_cells[2].text = field["可为空"]
row_cells[3].text = field["默认值"]
row_cells[4].text = field["键"]
row_cells[5].text = field["注释"]
# 4. 添加分隔线(分页符)
self.doc.add_page_break()
def generate(self):
"""主生成逻辑"""
# 1. 连接数据库
self.connect()
# 2. 添加文档标题
main_title = self.doc.add_heading(level=0)
main_title_run = main_title.add_run(f"{self.config['db']['database']} 数据库说明文档")
main_title_run.font.size = Inches(0.3)
main_title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 3. 获取所有表并逐个生成
tables = self.get_tables()
for idx, table in enumerate(tables):
print(f"📌 正在生成第{idx+1}/{len(tables)}个表:{table}")
table_info = self.get_table_info(table)
ai_desc = self.call_ali_ai(table_info)
self.add_table_to_doc(table_info, ai_desc)
# 4. 保存Word文档
self.doc.save(self.config["docs"]["output_file"])
print(f"\n✅ Word文档生成完成!路径:{os.path.abspath(self.config['docs']['output_file'])}")
# 5. 关闭数据库连接
self.cursor.close()
self.db_conn.close()
if __name__ == "__main__":
# 初始化并执行生成
gen = AliDBDocGenerator(CONFIG)
gen.generate()
四、使用步骤
1. 配置修改
修改代码中CONFIG字典的 3 部分内容:
db:填写 MySQL 的地址、账号、密码、数据库名;ali:填写阿里云百炼的 API Key;docs:指定 Word 文档输出路径。