【Python】题库数据导出成Word文档
需求场景:
从题库解析的导入的数据,现在又需要导出成Word文档
数据库表结构:
CREATE TABLE `trn_ex_qabank` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `qa_type` char(1) NOT NULL COMMENT '考题类型', `qa_subject` text NOT NULL COMMENT '考题题目', `qa_answer` text COMMENT '考题答案', `qa_cate` varchar(32) DEFAULT NULL COMMENT '题库分类', `qa_tag` varchar(32) DEFAULT NULL COMMENT '题库标签', `qa_analy` text COMMENT '考题分析', `cre_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `cre_by` varchar(32) NOT NULL COMMENT '创建人', `upd_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `upd_by` varchar(32) NOT NULL COMMENT '更新人', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10388 DEFAULT CHARSET=utf8mb4 COMMENT='考试题库';
1、要求需要按找题库名进行分组处理
mysql> SELECT qa_tag FROM trn_ex_qabank WHERE qa_tag IS NOT NULL GROUP BY qa_tag -> ; +-----------------------------------------------+ | qa_tag | +-----------------------------------------------+ | 【104题】证书认证系统_证书认证密钥管理系统 | | 【105题】报告编制 | | 【114题】涉及密码的网络安全相关法律法规 | | 【116题】测评过程 | | 【117题】测评工具使用 | | 【122题】风险分析 | | 【128题】智能密码钥匙 | | 【147题】杂凑密码 | | 【148题】密码应用测评要求 | | 【14题】随机数技术 | | 【152题】测评方法与实施 | | 【159题】量化评估 | | 【19题】测评内容 | | 【20题】智能IC卡密钥管理系统 | | 【223题】其他密码模块 | | 【229题】分组密码 | | 【236题】密码学基础知识 | | 【248题】密码应用基本要求 | | 【24题】安全认证网关 | | 【254题】公钥密码 | | 【25题】密钥管理技术 | | 【25题】电子标签芯片 | | 【26题】抗抵赖技术 | | 【272题】测评案例分析 | | 【28题】安全芯片 | | 【29题】签名验签服务器 | | 【32题】安全门禁系统 | | 【32题】智能IC卡 | | 【337题】密码法律法规与规范性文件 | | 【33题】对称密钥管理产品 | | 【34题】动态令牌_动态令牌认证系统 | | 【35题】PKI技术 | | 【35题】安全通信协议 | | 【38题】密码键盘 | | 【43题】区块链密码模块 | | 【43题】可信密码模块 | | 【47题-豪密自研】密码应用与安全性评估实务综合 | | 【47题】测评对象选取 | | 【48题】时间戳服务器 | | 【49题】密码应用政策文件 | | 【4题】实体鉴别协议 | | 【51题】云服务器密码机 | | 【53题】电子文件密码应用系统 | | 【54题】PCI-E_PCI密码卡 | | 【54题】可信计算密码支撑平台 | | 【58题】服务器密码机 | | 【60题】SSL VPN网关 | | 【67题】方案密评 | | 【6题】身份认证技术 | | 【70题】安全电子签章系统 | | 【74题】党和国家关于密码工作的方针政策 | | 【75题】IPSec VPN网关 | | 【7题】密钥交换协议 | | 【86题】金融数据密码机 | | 【88题】随机数发生器 | | 【8题】测评指标选择 | | 【99题】序列密码 | | 【9题】安全浏览器密码模块 | +-----------------------------------------------+ 58 rows in set (0.14 sec) mysql>
2、代码实现:
import pymysql from docx import Document # MySQL数据库连接配置 db_config = { 'host': '192.168.200.163', # 替换为你的MySQL服务器地址 'port': 3306, 'user': 'zacper', # 替换为你的MySQL用户名 'password': 'Zacper@24pwd', # 替换为你的MySQL密码 'database': 'zacper', # 替换为你的数据库名 'charset': 'utf8mb4' # 确保使用正确的字符集 } if __name__ == '__main__': # 连接到MySQL数据库 connection = pymysql.connect(**db_config) try: with connection.cursor() as qaTagCursor: # 执行SQL查询以获取题目 sql = "SELECT qa_tag FROM trn_ex_qabank WHERE qa_tag IS NOT NULL GROUP BY qa_tag " # 假设你的表名为questions qaTagCursor.execute(sql) results = qaTagCursor.fetchall() # 将查询结果添加到Word文档中 for row in results: # 创建一个新的Word文档 doc = Document() try: with connection.cursor() as qaCursor: eachSql = f"SELECT * FROM trn_ex_qabank WHERE qa_tag = '{row[0]}' " qaCursor.execute(eachSql) qaResults = qaCursor.fetchall() for qaRow in qaResults: # 添加题目 qa_subject doc.add_paragraph(f'{qaRow[2]}') # 添加答案(可选) doc.add_paragraph(f'答案: {qaRow[3]}') doc.add_paragraph(f'解析: {qaRow[6]}') # 添加一个空行作为分隔(可选) doc.add_paragraph('') finally: # 保存Word文档 doc.save(f'{row[0]}.docx') finally: # 关闭数据库连接 connection.close() print("Word文档已成功创建并保存为questions.docx")
实现结果: