Python实现数据库数据自动化导出PDF报告

 更新时间:2025年09月25日 10:17:07   作者:IT小本本  
本文将介绍如何使用Python构建一个自动化工具,实现从MySQL数据库提取员工数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

本文将介绍如何使用Python构建一个自动化工具,实现从MySQL数据库提取员工数据,并为每位员工生成包含定制化表格的PDF报告。通过该方案,可显著提升数据导出效率,避免手动操作误差,同时支持灵活的格式定制。

需求:从MySQL数据库提取员工数据,并为每位员工生成包含定制化表格的PDF报告。

最终想要的结果:

技术栈与核心功能

主要技术组件

数据库连接:使用pymysql实现Python与MySQL的交互,支持字符集配置和字典游标(便于数据处理)。

PDF生成:基于reportlab库构建PDF文档,支持表格样式定制、中文字体渲染和动态内容生成。

异常处理:通过try-except结构和traceback模块捕获运行时错误,提供详细日志便于调试。

文件管理:自动创建输出目录,使用时间戳确保文件名唯一,避免文件覆盖。

功能亮点

自动检测数据库表结构,支持动态字段提取

为每位员工生成独立PDF,包含姓名、薪资等关键信息

定制化表格样式(背景色、字体、边框等)

完整的中文字体支持(通过注册系统字体实现)

核心代码解析

1. 数据库连接与数据获取

import pymysql

def connect_to_database():
    try:
        connection = pymysql.connect(
            host='127.0.0.1',
            user='root',
            password='root',
            database='250515sj',
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )
        print("数据库连接成功!")
        return connection
    except Exception as e:
        # 详细异常日志记录
        print(f"数据库连接错误: {str(e)}")
        print("详细错误信息:\n", traceback.format_exc())
        return None

关键配置:使用DictCursor直接返回字典格式数据,便于后续处理;charset='utf8mb4'确保支持 emoji 等特殊字符。

健壮性设计:通过异常捕获避免程序因数据库连接失败崩溃,并提供堆栈跟踪信息。

数据表内容:

2. 数据提取与表结构校验

def get_employees_data(connection):
    try:
        with connection.cursor() as cursor:
            # 表存在性校验
            cursor.execute("SHOW TABLES LIKE 'employees'")
            if not cursor.fetchone():
                print("错误:employees表不存在!")
                return None, None
                
            # 提取表结构与数据
            cursor.execute("SHOW COLUMNS FROM employees")
            columns = [col['Field'] for col in cursor.fetchall()]
            cursor.execute("SELECT * FROM employees")
            data = cursor.fetchall()
            
            print(f"表结构: {columns}, 获取到 {len(data)} 条记录")
            return columns, data
    except Exception as e:
        # 数据操作异常处理
        print(f"获取数据错误: {str(e)}", traceback.format_exc())
        return None, None

预处理逻辑:先校验表是否存在,避免后续操作抛出未知错误。

数据格式:返回字段列表和字典数组,便于与PDF生成模块对接。

3. 个性化PDF生成

def create_pdf_for_employee(employee_data, columns):
    try:
        # 目录创建
        output_dir = "employee_pdfs"
        os.makedirs(output_dir, exist_ok=True)
        
        # 字段筛选与中文表头映射
        export_data = [employee_data[col] for col in ['name', 'salary']]
        filename = f"{employee_data['name']}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.pdf"
        path = os.path.join(output_dir, filename)
        
        # PDF文档初始化
        doc = SimpleDocTemplate(path, pagesize=letter)
        styles = getSampleStyleSheet()
        
        # 中文字体注册(关键步骤)
        pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))
        title_style = ParagraphStyle(
            'CustomTitle',
            parent=styles['Heading1'],
            fontName='SimHei',
            fontSize=24,
            spaceAfter=30
        )
        
        # 表格数据与样式
        table_data = [['姓名', '薪资'], export_data]
        table = Table(table_data)
        table.setStyle(TableStyle([
            ('BACKGROUND', (0,0), (-1,0), colors.grey),    # 表头背景色
            ('TEXTCOLOR', (0,0), (-1,0), colors.whitesmoke), # 表头文字颜色
            ('ALIGN', (0,0), (-1,-1), 'CENTER'),            # 全局居中对齐
            ('FONTNAME', (0,0), (-1,-1), 'SimHei'),          # 中文字体应用
            ('GRID', (0,0), (-1,-1), 1, colors.black)        # 边框设置
        ]))
        
        # 文档元素组装
        elements = [
            Paragraph(f"{employee_data['name']}的个人信息", title_style),
            Spacer(1, 20),
            table
        ]
        doc.build(elements)
        return path
    except Exception as e:
        print(f"生成PDF错误: {str(e)}", traceback.format_exc())
        return None

中文字体解决方案:通过TTFont注册本地字体文件(需将SimHei.ttf放在程序目录或指定路径),解决中文乱码问题。

样式定制技巧

  • 分层设置背景色(表头灰色,内容米色)
  • 不同层级字体大小(表头14pt,内容12pt)
  • 全局居中对齐与边框线增强可读性

文件名策略:使用姓名+时间戳组合,确保唯一性并便于文件管理。

运行前准备

1、 安装依赖库:

pip install pymysql reportlab

2、 字体文件准备:

  • 从Windows系统字体目录(C:\Windows\Fonts\SimHei.ttf)复制到程序目录
  • 或替换为其他中文字体(如思源黑体),注意修改注册字体名称

3、 数据库配置:

  • 确保employees表存在,包含namesalary字段
  • 根据实际环境修改数据库连接参数(主机、用户名、密码等)

运行后的效果

以上就是Python实现数据库数据自动化导出PDF报告的详细内容,更多关于Python数据库数据导出为PDF的资料请关注脚本之家其它相关文章!

相关文章

  • Python使用Selenium进行元素定位的步骤和方法

    Python使用Selenium进行元素定位的步骤和方法

    在使用Selenium进行网页自动化测试时,正确且高效地定位目标元素是至关重要的,以下是详细的步骤和方法,帮助你全面掌握如何使用Selenium进行元素定位,需要的朋友可以参考下
    2025-06-06
  • Python利用正则表达式匹配并截取指定子串及去重的方法

    Python利用正则表达式匹配并截取指定子串及去重的方法

    这篇文章主要介绍了Python利用正则表达式匹配并截取指定子串及去重的方法,涉及Python正则表达式匹配及字符串截取操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python 实现dict转json并保存文件

    python 实现dict转json并保存文件

    今天小编就为大家分享一篇python 实现dict转json并保存文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • postman和python mock测试过程图解

    postman和python mock测试过程图解

    这篇文章主要介绍了postman和python mock测试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python字符串格式化输出代码实例

    Python字符串格式化输出代码实例

    这篇文章主要介绍了Python字符串格式化输出代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • pytorch逐元素比较tensor大小实例

    pytorch逐元素比较tensor大小实例

    今天小编就为大家分享一篇pytorch逐元素比较tensor大小实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python实现的排列组合计算操作示例

    Python实现的排列组合计算操作示例

    这篇文章主要介绍了Python实现的排列组合计算操作,涉及Python数学运算的相关函数与使用技巧,需要的朋友可以参考下
    2017-10-10
  • Python实现OCR识别之pytesseract案例详解

    Python实现OCR识别之pytesseract案例详解

    这篇文章主要介绍了Python实现OCR识别之pytesseract案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 修改Pandas的行或列的名字(重命名)

    修改Pandas的行或列的名字(重命名)

    这篇文章主要介绍了修改Pandas的行或列的名字(重命名),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • tensorflow没有output结点,存储成pb文件的例子

    tensorflow没有output结点,存储成pb文件的例子

    今天小编就为大家分享一篇tensorflow没有output结点,存储成pb文件的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论