【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")
实现结果:



浙公网安备 33010602011771号