固定模板测试PDF与MySQL数据比对方案及存储结构咨询
零部件测试PDF与MySQL数据对账方案解答
问题1:PDF异构数据的MySQL存储方案
优先选择多表关联存储,适配绝大多数制造测试业务场景:
- 新建主表存储PDF内的公共零散字段:包括报告唯一编号、零部件SN、测试时间、测试人员、总判定结果等全局信息,单条报告对应主表1条记录,主键设为报告ID
- 每个不同结构的PDF表格对应独立子表:比如性能参数测试表、老化测试结果表、外观检测表等,子表通过外键关联主表的报告ID,子表单行对应PDF表格的单行数据
多表存储的优势为数据冗余度低、后续模板扩展只需新增/修改对应子表字段、分模块对账时查询效率更高,适合90%以上的生产场景。
仅当满足以下全部条件时可选择单表存储:PDF模板极简单(仅含1个表格+不超过5个零散字段)、后续无模板调整需求、年报告生成量低于10万,单表优势是前期开发速度更快。
问题2:Python实现数据比对的可行方案
因为是固定模板PDF,无需引入OCR,可直接通过结构化解析+数据对比实现,整体步骤如下:
- PDF内容结构化提取
- 零散文本提取:用
PyMuPDF(fitz)库按固定坐标读取对应位置的文本内容,模板固定时每个零散字段的坐标完全不变,提取结果整理为字典格式 - 表格内容提取:用
camelot-py或tabula-py库读取固定页码、固定位置的PDF表格,直接转换为pandas的DataFrame格式
- 零散文本提取:用
- 数据库数据拉取
用pymysql或sqlalchemy连接MySQL,以报告ID为查询条件,分别拉取对应主表的公共字段(转字典)和子表的表格数据(转DataFrame) - 一致性比对逻辑实现
- 零散字段比对:直接遍历PDF提取字典和数据库返回字典的所有键,逐一对比值,记录不一致的字段名、PDF原值、数据库存储值
- 表格数据比对:直接调用
pandas内置的compare()方法对比两个同结构DataFrame,可快速输出差异所在的行、列、两侧数值,无需自行编写循环逻辑 - 若需留存对账记录,可用
openpyxl将所有差异项导出为Excel对账报告
内容的提问来源于stack exchange,提问作者Sarvendra Singh
相关产品推荐
相关产品推荐

