首页 > 基础资料 博客日记
使用 Python 将 Excel 数据批量导入到数据库中(SQLite)
2026-04-08 10:30:02基础资料围观1次
在日常数据处理工作中,将 Excel 文件内容导入数据库是一个常见需求。Python 生态中虽然有 pandas、openpyxl 等成熟方案,但当遇到超大型 Excel 文件或需要精细控制单元格格式时,借助专用组件往往能提升开发效率。
本文基于轻量级 Excel 处理库完成 Excel 文件解析,结合 Python 内置的 SQLite 数据库(无需独立部署),实现多工作表自动识别、动态创建表结构、批量数据入库的完整方案。
一、应用场景与方案优势
适用场景
- 企业 Excel 报表数据迁移至数据库持久化存储;
- 自动化办公:定期将 Excel 导出数据同步到数据库;
- 轻量级数据中台:多 Excel 文件整合入库,方便后续查询分析;
4.测试数据构造:快速将 Excel 测试数据导入数据库。
方案核心优势
- 无环境依赖:无需安装 Microsoft Office/WPS,纯 Python 库解析 Excel;
- 多工作表适配:自动遍历 Excel 所有 sheet,无需手动指定;
- 动态建表:根据 Excel 表头自动生成数据库表结构;
- 安全稳定:参数化 SQL 防注入,事务管理保证数据一致性;
- 轻量免费:适用于中小型 Excel 文件处理,无额外成本。
二、环境准备
仅需安装 Excel 解析库(Free Spire.XLS for Python),SQLite 为 Python 内置库,无需额外安装:
pip install FreeSpire.XLS
三、核心执行流程
整个程序分为 5 个核心步骤,数据流转清晰无冗余:
加载Excel文件 → 连接数据库 → 遍历工作表 → 读取表头+动态建表 → 逐行数据插入 → 提交事务+释放资源
3.1 完整代码
from spire.xls import Workbook
import sqlite3
def excel_to_sqlite(excel_path, db_path):
# 1. 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(excel_path)
# 2. 连接数据库
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 3. 遍历每个工作表
for sheet_index in range(workbook.Worksheets.Count):
sheet = workbook.Worksheets.get_Item(sheet_index)
sheet_name = sheet.Name.replace(" ", "") # 表名中去掉空格
# 4. 读取表头(第一行)
header = []
for col in range(sheet.AllocatedRange.ColumnCount):
raw_value = sheet.Range[1, col + 1].Value
# 字段名中去掉空格,并避免空字段
field_name = raw_value.replace(" ", "") if raw_value else f"col_{col}"
header.append(field_name)
# 5. 创建数据库表(所有字段暂定为 TEXT 类型)
create_sql = f"""
CREATE TABLE IF NOT EXISTS {sheet_name} (
{', '.join([f'[{h}] TEXT' for h in header])}
)
"""
cursor.execute(create_sql)
# 6. 逐行插入数据(跳过表头行)
for row in range(1, sheet.AllocatedRange.RowCount): # row=1 对应 Excel 第二行
row_data = []
for col in range(sheet.AllocatedRange.ColumnCount):
cell_value = sheet.Range[row + 1, col + 1].Value
row_data.append(cell_value)
# 使用参数化查询防止 SQL 注入
placeholders = ','.join(['?' for _ in row_data])
insert_sql = f"INSERT INTO {sheet_name} ({','.join(header)}) VALUES ({placeholders})"
cursor.execute(insert_sql, row_data)
# 7. 提交并清理
conn.commit()
conn.close()
workbook.Dispose()
if __name__ == "__main__":
excel_to_sqlite("Sample.xlsx", "output/Report.db")
3.2 关键点解析
1. 工作表遍历与表名清洗
workbook.Worksheets.Count 获取工作表总数,get_Item(s) 按索引获取。工作表名称可能包含空格、特殊字符,直接用作 SQLite 表名会导致语法错误,因此使用 .replace(" ", "") 去除空格。更严谨的做法可增加正则过滤,只保留字母数字和下划线。
2. 动态建表与字段类型
示例将所有字段定义为 TEXT 类型,适配 Excel 中字符串、数字、日期等通用格式(可根据业务修改数据类型)。
3. 数据读取的范围
sheet.AllocatedRange 返回已使用的单元格区域(包含数据的最大矩形),比直接遍历全部行列更高效。注意 RowCount 和 ColumnCount 是基于 1 的计数。
4. 参数化插入
使用 ? 占位符配合 cursor.execute(insert_sql, row_data) 能自动处理字符串转义,避免因 Excel 单元格内容包含单引号导致的 SQL 错误,同时防范注入风险。
四、扩展:适配其他数据库
只需修改数据库连接部分,即可迁移到 MySQL、PostgreSQL 等。注意不同数据库的标识符引用符不同(MySQL 用反引号 `,PostgreSQL 用双引号 "),以及字段类型映射的差异。例如连接 MySQL:
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', db='test')
cursor = conn.cursor()
# 建表时将 [field] 改为 `field`
结语
本文实现了一套轻量化、高可用的 Excel 数据导入数据库方案,核心优势为多工作表自动适配、动态表结构生成、安全的数据插入,代码简洁且易于二次开发。方案适用于日常数据迁移、报表导入等轻量级场景,无需复杂配置即可快速落地使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- SDD 之外是 Harness 吗?
- 嵌套 H5 的跨端通信:iOS / Android / 小程序 / 浏览器
- UEFI Application 如何调用 Protocol
- 企业微信服务商争源数字科技谈中小企业如何用好数字化工具
- 【生产避坑】Flink CDC + SQL Server 无增量?5分钟定位,直接抄解决方案
- Python网络请求库,从 requests 到 httpx
- 使用 Python 将 Excel 数据批量导入到数据库中(SQLite)
- 我花了一上午,帮一个 AI 找到了自己的"亲生父母"
- PostgreSQL 数据误删 止损操作
- 推荐3款必备“测试神器”Skill:用例生成、根因分析一键搞定

