Python 批量导出数据库数据至 Excel 文件
<p>在日常工作中,我们经常需要将数据库中的数据导出为 Excel 文件,以便进行数据分析或业务汇报。最近,我就遇到了将 SQLite 数据库中所有表一次性导出到 Excel 的需求。<br>本文将介绍如何仅使用 Python 内置库 + 免费 Excel 处理库,实现将数据库所有表批量导出到一个 Excel 文件,每个表对应一个独立工作表。</p>
<h2 id="一环境准备">一、环境准备</h2>
<h3 id="1-python-环境">1. Python 环境</h3>
<p>建议使用 Python 3.6 及以上版本。</p>
<h3 id="2-安装依赖库">2. 安装依赖库</h3>
<ul>
<li><code>sqlite3</code>:Python 标准库,无需额外安装</li>
<li><code>Free Spire.XLS</code>:免费的 Excel 处理库,支持创建、写入和格式化 Excel 文件</li>
</ul>
<p>安装命令:</p>
<pre><code class="language-bash">pip install Spire.Xls.Free
</code></pre>
<h2 id="二实现思路">二、实现思路</h2>
<p>整个导出流程可以拆解为以下 5 个步骤:</p>
<ol>
<li>连接 SQLite 数据库</li>
<li>获取数据库中所有用户表的名称</li>
<li>创建空白 Excel 工作簿</li>
<li>遍历每一张表:
<ul>
<li>读取表结构(列名)与数据</li>
<li>新建工作表(以表名命名)</li>
<li>写入表头与数据</li>
<li>自动调整行高与列宽</li>
</ul>
</li>
<li>保存 Excel 文件,关闭数据库连接</li>
</ol>
<h2 id="三完整代码">三、完整代码</h2>
<pre><code class="language-python">from spire.xls import *
from spire.xls.common import *
import sqlite3
# ---------------------- 1. 连接数据库 ----------------------
# 请将路径替换为你的数据库文件路径
conn = sqlite3.connect("Sales Data.db")
cursor = conn.cursor()
# ---------------------- 2. 获取所有用户表名 ----------------------
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
table_names = for name in cursor.fetchall()]
# ---------------------- 3. 创建 Excel 工作簿 ----------------------
workbook = Workbook()
workbook.Worksheets.Clear() # 清空默认生成的工作表
# ---------------------- 4. 逐表写入数据 ----------------------
for table_name in table_names:
# 4.1 获取列名(表头)
cursor.execute(f"PRAGMA table_info('{table_name}')")
columns_info = cursor.fetchall()
column_names = for info in columns_info]
# 4.2 获取表数据
cursor.execute(f"SELECT * FROM {table_name}")
rows = cursor.fetchall()
# 4.3 新建工作表(以表名命名)
sheet = workbook.Worksheets.Add(table_name)
# 4.4 写入表头
for i, col_name in enumerate(column_names):
sheet.Range.Value = col_name
# 4.5 写入数据行
for row_idx, row_data in enumerate(rows):
for col_idx, cell_value in enumerate(row_data):
sheet.Range.Value = cell_value
# 4.6 自动调整行高和列宽
sheet.AllocatedRange.AutoFitRows()
sheet.AllocatedRange.AutoFitColumns()
# ---------------------- 5. 保存并清理资源 ----------------------
workbook.SaveToFile("DataBaseToExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()
conn.close()
print("数据导出完成!")
</code></pre>
<blockquote>
<p>本文示例使用 SQLite,若需要从 MySQL、PostgreSQL 等数据库导出,只需替换数据库连接部分,后续处理逻辑完全通用。</p>
</blockquote>
<h2 id="四关键点说明">四、关键点说明</h2>
<h3 id="1-获取表名">1. 获取表名</h3>
<p>SQLite 的系统表 <code>sqlite_master</code> 存储了所有表的结构信息。通过 <code>type='table'</code> 过滤,可以只获取用户表,自动排除系统表。</p>
<h3 id="2-获取列名">2. 获取列名</h3>
<p><code>PRAGMA table_info</code> 是 SQLite 提供的便捷命令,返回表的列信息。结果中第二个字段即为列名,适合直接作为 Excel 表头。</p>
<h3 id="3-行列索引注意事项">3. 行列索引注意事项</h3>
<p><code>sheet.Range[行, 列]</code> 的索引从 <strong>1</strong> 开始,而非 0。因此:</p>
<ul>
<li>表头写入第 1 行</li>
<li>数据从第 2 行开始写入,对应索引 <code>row_idx + 2</code></li>
</ul>
<h3 id="4-自动格式化">4. 自动格式化</h3>
<p><code>AllocatedRange</code> 会自动识别已被数据填充的区域,无需手动计算边界。<br>
<code>AutoFitRows()</code> 和 <code>AutoFitColumns()</code> 可根据内容自动调整行高与列宽,使生成的表格更加美观。</p>
<h2 id="五总结">五、总结</h2>
<p>本文提供了一套简洁、实用的 Python 数据导出方案,仅用不到 50 行代码,即可实现将数据库多表一键导出为 Excel 文件。无需复杂框架,不依赖重量级工具,非常适合用于快速数据导出、业务报表生成以及日常数据处理场景。</p><br><br>
来源:https://www.cnblogs.com/jazz-z/p/19797072
頁:
[1]