使用 Python 将 Excel 数据批量导入到SQLite数据库中
在日常数据处理工作中,将 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 数据导入数据库方案,核心优势为多工作表自动适配、动态表结构生成、安全的数据插入,代码简洁且易于二次开发。方案适用于日常数据迁移、报表导入等轻量级场景,无需复杂配置即可快速落地使用。
如何将数据导入SQLite数据库
以下内容为扩展知识,关于如何将数据导入SQLite数据库中。
我注意到您的消息似乎不完整。如何将数据导入SQLite数据库?
请提供更多信息,例如:
- 您要导入什么格式的数据(CSV、JSON、SQL文件等)?
- 您使用的操作系统和编程环境(Python、命令行等)?
- 具体的导入需求或遇到的问题
同时,我可以先提供几种常见的导入SQLite数据库的方法:
1. 命令行导入CSV文件
sqlite3 database.db .mode csv .import data.csv table_name
2. 使用Python导入
import sqlite3
import pandas as pd
# 读取CSV并导入
df = pd.read_csv('data.csv')
conn = sqlite3.connect('database.db')
df.to_sql('table_name', conn, if_exists='replace', index=False)3. 导入SQL文件
sqlite3 database.db < dump.sql
请补充您的具体需求,我会提供更精确的帮助!
到此这篇关于使用 Python 将 Excel 数据批量导入到SQLite数据库中的文章就介绍到这了,更多相关Python Excel 数据导入数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解centos7+django+python3+mysql+阿里云部署项目全流程
这篇文章主要介绍了详解centos7+django+python3+mysql+阿里云部署项目全流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-11-11


最新评论