当前位置: 首页 > news >正文

应用场景与方案优势

  1. 企业 Excel 报表数据迁移至数据库持久化存储;
  2. 自动化办公:定期将 Excel 导出数据同步到数据库;
  3. 轻量级数据中台:多 Excel 文件整合入库,方便后续查询分析;
    4.测试数据构造:快速将 Excel 测试数据导入数据库。

方案核心优势

  1. 无环境依赖:无需安装 Microsoft Office/WPS,纯 Python 库解析 Excel;
  2. 多工作表适配:自动遍历 Excel 所有 sheet,无需手动指定;
  3. 动态建表:根据 Excel 表头自动生成数据库表结构;
  4. 安全稳定:参数化 SQL 防注入,事务管理保证数据一致性;
  5. 轻量免费:适用于中小型 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返回已使用的单元格区域(包含数据的最大矩形),比直接遍历全部行列更高效。注意RowCountColumnCount是基于 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`
http://www.jsqmd.com/news/1093405/

相关文章:

  • 告别会议低效:智能会议系统的本地化部署方案
  • Java毕设项目:基于 SpringBoot+Vue 的网络域名管理系统设计与实现 前后端分离架构下 Web 域名运维管理平台 (源码+文档,讲解、调试运行,定制等)
  • tensorRT整个系列的总结(包括量化,减枝)
  • 立个flag。周四发表一篇文章。
  • Python变量作用域全解析:从局部到全局,彻底掌握LEGB规则
  • 无需备份即可从 iPhone 恢复已删除短信的 4 种方法
  • 智慧安防行业物联网技术与方案指南:从监控到应急响应的全方位解决方案
  • 【RISC-V】解决WSL2命令行总是出现bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)的问题
  • 【计算机毕业设计案例】网络域名资源分配与统筹管理系统设计 信息化视角下域名生命周期管理系统设计(程序+文档+讲解+定制)
  • Android 开发问题:Invalid <color> for given resource value.
  • Shopify分销系统搭建指南:适合初创团队的低成本增长方案
  • 我用 Claude Code 做 Code Review 两个月,Bug 漏检率从 41% 降到 11%
  • 服装收银系统究竟哪个好?最后我选了这个
  • 别再混着说了:2026 AI Agent 技术栈分层(tool / Skill / MCP / A2A / Context Harness Engineering)
  • Codex Agent Legion 实现原理与 GitHub 使用指南
  • 剪流AI员工手机数据安全架构解析:企业客户资料是否存在泄露风险?
  • 墨香情手游全域自由轻功,无束缚飞檐走壁闯江湖
  • .Net如何在AgentFramework中给AI智能体给AI添加执行python脚本和运行代码的能力后——后续可用于对接openClaw技能
  • Mybatis基础操作
  • Rust的async函数中的await点优化与编译器在状态机生成中的转换
  • 各类幕墙验收时应提供的资料
  • Skill用得好,下班走得早:一文讲透Skill的结构与设计
  • AI native: Casebook 面向 AI Agent 时代的测试用例工程化工作流
  • 149期目录 黄大年茶思屋“难题揭榜”第149期--云核心网领域第四期
  • 一篇搞懂SpringMVC XML 配置标签<context:component-scan>
  • Linux x86-64 DMA映射探秘(二)——SWIOTLB的bounce buffer机制
  • 计算机Java毕设实战-网络域名资源信息化管理平台设计与实现 面向企业的 Web 域名运维管理系统设计【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-轻量化网络博客发布平台的设计与实现基于 SpringBoot 的在线文章发布管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • LLM Serving 进入下半场:Prefill/Decode 解耦架构、KV 迁移与 PD 调度工程实践
  • 浅谈src挖掘中—文件上传和XSS漏洞的组合拳,网络安全零基础入门到精通实战教程!