找回密码
 立即注册
首页 业界区 业界 Python 批量导出数据库数据至 Excel 文件

Python 批量导出数据库数据至 Excel 文件

颜清华 昨天 16:45
在日常工作中,我们经常需要将数据库中的数据导出为 Excel 文件,以便进行数据分析或业务汇报。最近,我就遇到了将 SQLite 数据库中所有表一次性导出到 Excel 的需求。
本文将介绍如何仅使用 Python 内置库 + 免费 Excel 处理库,实现将数据库所有表批量导出到一个 Excel 文件,每个表对应一个独立工作表。
一、环境准备

1. Python 环境

建议使用 Python 3.6 及以上版本。
2. 安装依赖库


  • sqlite3:Python 标准库,无需额外安装
  • Free Spire.XLS:免费的 Excel 处理库,支持创建、写入和格式化 Excel 文件
安装命令:
  1. pip install Spire.Xls.Free
复制代码
二、实现思路

整个导出流程可以拆解为以下 5 个步骤:

  • 连接 SQLite 数据库
  • 获取数据库中所有用户表的名称
  • 创建空白 Excel 工作簿
  • 遍历每一张表:

    • 读取表结构(列名)与数据
    • 新建工作表(以表名命名)
    • 写入表头与数据
    • 自动调整行高与列宽

  • 保存 Excel 文件,关闭数据库连接
三、完整代码
  1. from spire.xls import *
  2. from spire.xls.common import *
  3. import sqlite3
  4. # ---------------------- 1. 连接数据库 ----------------------
  5. # 请将路径替换为你的数据库文件路径
  6. conn = sqlite3.connect("Sales Data.db")
  7. cursor = conn.cursor()
  8. # ---------------------- 2. 获取所有用户表名 ----------------------
  9. cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
  10. table_names = [name[0] for name in cursor.fetchall()]
  11. # ---------------------- 3. 创建 Excel 工作簿 ----------------------
  12. workbook = Workbook()
  13. workbook.Worksheets.Clear()   # 清空默认生成的工作表
  14. # ---------------------- 4. 逐表写入数据 ----------------------
  15. for table_name in table_names:
  16.     # 4.1 获取列名(表头)
  17.     cursor.execute(f"PRAGMA table_info('{table_name}')")
  18.     columns_info = cursor.fetchall()
  19.     column_names = [info[1] for info in columns_info]
  20.     # 4.2 获取表数据
  21.     cursor.execute(f"SELECT * FROM {table_name}")
  22.     rows = cursor.fetchall()
  23.     # 4.3 新建工作表(以表名命名)
  24.     sheet = workbook.Worksheets.Add(table_name)
  25.     # 4.4 写入表头
  26.     for i, col_name in enumerate(column_names):
  27.         sheet.Range[1, i + 1].Value = col_name
  28.     # 4.5 写入数据行
  29.     for row_idx, row_data in enumerate(rows):
  30.         for col_idx, cell_value in enumerate(row_data):
  31.             sheet.Range[row_idx + 2, col_idx + 1].Value = cell_value
  32.     # 4.6 自动调整行高和列宽
  33.     sheet.AllocatedRange.AutoFitRows()
  34.     sheet.AllocatedRange.AutoFitColumns()
  35. # ---------------------- 5. 保存并清理资源 ----------------------
  36. workbook.SaveToFile("DataBaseToExcel.xlsx", FileFormat.Version2016)
  37. workbook.Dispose()
  38. conn.close()
  39. print("数据导出完成!")
复制代码
本文示例使用 SQLite,若需要从 MySQL、PostgreSQL 等数据库导出,只需替换数据库连接部分,后续处理逻辑完全通用。
四、关键点说明

1. 获取表名

SQLite 的系统表 sqlite_master 存储了所有表的结构信息。通过 type='table' 过滤,可以只获取用户表,自动排除系统表。
2. 获取列名

PRAGMA table_info 是 SQLite 提供的便捷命令,返回表的列信息。结果中第二个字段即为列名,适合直接作为 Excel 表头。
3. 行列索引注意事项

sheet.Range[行, 列] 的索引从 1 开始,而非 0。因此:

  • 表头写入第 1 行
  • 数据从第 2 行开始写入,对应索引 row_idx + 2
4. 自动格式化

AllocatedRange 会自动识别已被数据填充的区域,无需手动计算边界。
AutoFitRows() 和 AutoFitColumns() 可根据内容自动调整行高与列宽,使生成的表格更加美观。
五、总结

本文提供了一套简洁、实用的 Python 数据导出方案,仅用不到 50 行代码,即可实现将数据库多表一键导出为 Excel 文件。无需复杂框架,不依赖重量级工具,非常适合用于快速数据导出、业务报表生成以及日常数据处理场景。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册