数据库数据导出(通过 Python 将数据库表导出到 Excel)

数据库数据导出(通过 Python 将数据库表导出到 Excel)
通过 Python 将数据库表导出到 Excel

最近需要将 SQLite 数据库里的所有表都导出成 Excel 表格,本文记录一下如何只用 Python 内置库 + 免费 Excel 处理库,实现将数据库所有表批量导出到一个 Excel 文件(每个表对应一个独立工作表)。

数据库数据导出(通过 Python 将数据库表导出到 Excel)


一、环境准备

  1. Python 环境:3.6及以上版本均可
  2. 依赖库安装

• sqlite3:Python 自带的 SQLite 数据库操作库,无需安装

• Free Spire.XLS:用于创建、写入和格式化 Excel 文件的免费版库(注意限制)
打开命令行执行安装命令:

 pip install Spire.Xls.Free

二、核心实现思路

通过以下 5 个步骤就能完成数据导出流程:

  1. 连接本地 SQLite 数据库
  2. 获取数据库中所有表的名称
  3. 创建空白 Excel 工作簿
  4. 遍历每一张数据库表:读取表头+数据 → 新建工作表写入 → 简单格式化
  5. 保存 Excel 文件,关闭数据库连接

三、完整可运行代码

from spire.xls import *from spire.xls.common import *import sqlite3# ---------------------- 1. 连接SQLite数据库 ----------------------# 替换为你的数据库文件路径(相对路径/绝对路径均可)conn = sqlite3.connect("Sales Data.db")cursor = conn.cursor()# ---------------------- 2. 获取数据库中所有表名 ----------------------cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")# 提取所有表名,生成列表tableNames = [name[0] for name in cursor.fetchall()]# ---------------------- 3. 创建空白Excel工作簿 ----------------------workbook = Workbook()# 清空默认工作表,避免多余表格workbook.Worksheets.Clear()# ---------------------- 4. 遍历所有表,写入Excel ----------------------for tableName in tableNames:    # 4.1 获取当前表的列名(Excel表头)    cursor.execute(f"PRAGMA table_info('{tableName}')")    columnsInfo = cursor.fetchall()    columnNames = [columnInfo[1] for columnInfo in columnsInfo]    # 4.2 获取当前表的所有数据    cursor.execute(f"SELECT * FROM {tableName}")    rows = cursor.fetchall()        # 4.3 新建工作表,名称=数据库表名    sheet = workbook.Worksheets.Add(tableName)        # 4.4 写入表头(第一行)    for i in range(len(columnNames)):        sheet.Range[1, i + 1].Value = columnNames[i]        # 4.5 写入表数据(修复原代码bug:从第0行开始遍历,避免丢失第一条数据)    for j in range(len(rows)):        row_data = rows[j]        for k in range(len(row_data)):            sheet.Range[j + 2, k + 1].Value = row_data[k]        # 4.6 表格格式化:自适应行列宽度 (可选)    sheet.AllocatedRange.AutoFitRows()    # 自适应行高    sheet.AllocatedRange.AutoFitColumns() # 自适应列宽# ---------------------- 5. 保存文件并释放资源 ----------------------# 保存Excel到指定路径workbook.SaveToFile("DataBaseToExcel.xlsx", FileFormat.Version2016)# 释放Excel对象资源workbook.Dispose()# 关闭数据库连接conn.close()print("数据导出完成!")

虽然示例用的是 SQLite,但换 MySQL、PostgreSQL 也不难,只要把 sqlite3 那块换成对应的连接方式就行,后面的处理逻辑完全一样。


四、几个关键点解析

  1. 表名获取
    sqlite_master 是 SQLite 的系统表,存着所有表的结构信息。这里筛选 type='table' 拿到的是用户表,系统表会被过滤掉。
  2. 列名获取
    PRAGMA table_info 这个命令挺有用的,返回每个列的详细信息。取第二个字段就是列名。
  3. 数据写入的坐标问题
    sheet.Range[行, 列] 是从1开始的,不是0。所以表头写在第一行 Range[1, i+1],数据从第二行开始 Range[j+1, k+1]。
  4. 格式化的小细节
    AllocatedRange 指的是已经被写入数据的区域,不用自己算边界,省事。AutoFitRows 和 AutoFitColumns 会自动调整行高列宽,不用手动调了。

最后

这是一个非常轻量化的 Python 数据导出方案,没有复杂的框架和配置,核心代码不到50行,就能实现数据库多表一键导出Excel。无论是处理销售数据、业务报表还是测试数据,都能直接复用,大幅提升日常数据处理效率。

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读

最新文章

热门文章

本栏目文章