使用 Python 将 Excel 数据批量导入到数据库中(SQLite)

张开发
2026/4/8 22:19:51 15 分钟阅读

分享文章

使用 Python 将 Excel 数据批量导入到数据库中(SQLite)
一、应用场景与方案优势适用场景企业 Excel 报表数据迁移至数据库持久化存储自动化办公定期将 Excel 导出数据同步到数据库轻量级数据中台多 Excel 文件整合入库方便后续查询分析4.测试数据构造快速将 Excel 测试数据导入数据库。方案核心优势无环境依赖无需安装 Microsoft Office/WPS纯 Python 库解析 Excel多工作表适配自动遍历 Excel 所有 sheet无需手动指定动态建表根据 Excel 表头自动生成数据库表结构安全稳定参数化 SQL 防注入事务管理保证数据一致性轻量免费适用于中小型 Excel 文件处理无额外成本。二、环境准备仅需安装 Excel 解析库Free Spire.XLS for PythonSQLite 为 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 fcol_{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): # row1 对应 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 fINSERT 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 用双引号以及字段类型映射的差异。例如连接 MySQLimport pymysql conn pymysql.connect(hostlocalhost, userroot, password123456, dbtest) cursor conn.cursor() # 建表时将 [field] 改为 field

更多文章