【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")

 

实现结果:

 

  

 

posted @ 2024-12-16 12:11  emdzz  阅读(11)  评论(0编辑  收藏  举报