环境准备1. Python 环境
安装依赖库
sqlite3:Python 标准库,无需额外安装Free Spire.XLS:免费的 Excel 处理库,支持创建、写入和格式化 Excel 文件
安装命令:
pip install Spire.Xls.Free二、实现思路
整个导出流程可以拆解为以下 5 个步骤:
- 连接 SQLite 数据库
- 获取数据库中所有用户表的名称
- 创建空白 Excel 工作簿
- 遍历每一张表:
- 读取表结构(列名)与数据
- 新建工作表(以表名命名)
- 写入表头与数据
- 自动调整行高与列宽
- 保存 Excel 文件,关闭数据库连接
三、完整代码
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 = [name[0] 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 = [info[1] 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[1, i + 1].Value = col_name # 4.5 写入数据行 for row_idx, row_data in enumerate(rows): for col_idx, cell_value in enumerate(row_data): sheet.Range[row_idx + 2, col_idx + 1].Value = cell_value # 4.6 自动调整行高和列宽 sheet.AllocatedRange.AutoFitRows() sheet.AllocatedRange.AutoFitColumns() # ---------------------- 5. 保存并清理资源 ---------------------- workbook.SaveToFile("DataBaseToExcel.xlsx", FileFormat.Version2016) workbook.Dispose() conn.close() 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()可根据内容自动调整行高与列宽,使生成的表格更加美观。
