Python实现数据库与Excel文件之间的数据导入与导出

news2024/10/7 12:28:42

数据库和Excel文件是两种常见且重要的数据存储方式。数据库通常用于大规模数据的高效存储、管理和查询,而Excel则以其直观的界面和简单的操作方式广泛应用于数据分析、报告生成和可视化等领域。在实际工作中,可能需要在这两者之间进行数据的导入与导出。例如,从数据库中提取数据到Excel进行深入分析和图表绘制,或者将Excel文件中的数据清洗整理后导入数据库进行集中管理和进一步处理。而Python因其便捷性和丰富的生态,能够帮助用户通过简单的代码处理数据库与Excel文件之间数据转换。
本文将介绍如何使用Python有效地实现数据库与Excel文件之间的数据自动化导入与导出,以SQLite数据库为例。

文章目录

    • 用Python将数据库数据导出到Excel表格
    • 用Python将Excel表格数据导入到数据库

本文所使用的方法需要用到sqlite3(Python标准库中的组件)和Spire.XLS for Python(PyPI: pip install Spire.XLS)。

用Python将数据库数据导出到Excel表格

我们可以使用 sqlite3 模块从数据库读取数据,并利用 Spire.XLS 模块创建 Excel 文件并将数据写入其中,从而实现数据库数据的导出。详细步骤如下:

  1. 导入必要的模块。
  2. 连接数据库:使用 sqlite3.connect() 连接 SQLite 数据库,并创建游标 cursor 执行 SQL 命令。
  3. 获取表名:执行 SQL 查询获取数据库中所有表的名称,并存储在 tableNames 列表中。
  4. 创建 Excel 工作簿:初始化一个 Workbook 对象,并使用 Workbook.Worksheets.Clear() 方法清除默认工作表。
  5. 遍历数据库表:对于 tableNames 中的每一个表名:
    • 查询表的列信息,提取列名并添加到 columnNames 列表中。
    • 获取表中的所有数据行到 rows 中。
    • 使用 Workbook.Worksheets.Add(sheetname) 方法在 Excel 中添加一个以表名命名的新工作表。
    • 使用 Worksheet.Range[row, col].Value 属性将 columnNames 作为标题写入工作表。
    • 遍历数据行,并使用相同的属性将数据写入对应的单元格。
    • 格式化工作表。
  6. 使用 Workbook.SaveToFile() 方法将工作簿保存到文件。
  7. 释放 workbook 的资源并关闭数据库连接。

代码示例

from spire.xls import *
from spire.xls.common import *
import sqlite3

# 连接到数据库
conn = sqlite3.connect("output/CompanyInfo.db")
cursor = conn.cursor()

# 获取数据库中所有的表名
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tableNames = [name[0] for name in cursor.fetchall()]

# 创建 Excel 文件
workbook = Workbook()
workbook.Worksheets.Clear()

# 遍历数据库中的每个表
for tableName in tableNames:
    # 获取表的列名
    cursor.execute(f"PRAGMA table_info('{tableName}')")
    columnsInfo = cursor.fetchall()
    columnNames = [columnInfo[1] for columnInfo in columnsInfo]

    # 获取表的数据
    cursor.execute(f"SELECT * FROM {tableName}")
    rows = cursor.fetchall()
    
    # 创建工作表
    sheet = workbook.Worksheets.Add(tableName)
    
    # 将标题行写入工作表
    for i in range(len(columnNames)):
        sheet.Range[1, i + 1].Value = columnNames[i]
    
    # 将数据写入工作表
    for j in range(1, len(rows)):
        column = rows[j]
        for k in range(len(column)):
            sheet.Range[j + 1, k + 1].Value = column[k]
    
    # 设置工作表格式
    sheet.AllocatedRange.Style.Font.FontName = "Times New Roman"
    sheet.AllocatedRange.Style.Font.Size = 12.0
    sheet.AllocatedRange.AutoFitRows()
    sheet.AllocatedRange.AutoFitColumns()

# 保存 Excel 文件
workbook.SaveToFile("output/DatabaseToExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()
conn.close()

结果
Python导出数据库数据到Excel表格

用Python将Excel表格数据导入到数据库

我们也可以使用 Spire.XLS 从 Excel 文件读取各种数据类型,然后使用 sqlite3 将数据写入数据库。详细步骤如下:

  1. 导入必要的模块。
  2. 创建 Workbook 实例:初始化一个 Workbook 对象以操作 Excel 工作簿。
  3. 加载 Excel 文件:使用 LoadFromFile 方法从指定路径加载 Excel 文件。
  4. 连接数据库:使用 sqlite3.connect() 连接 SQLite 数据库,并创建游标 cursor 执行 SQL 命令。
  5. 遍历工作表:对于工作簿中的每个工作表:
    • 使用 Worksheet.Name 属性获取工作表对象和名称,并去除名称中的空格。
    • 提取标题:使用 Worksheet.Range[row, col].Value 属性收集第一行数据作为数据库表的列名,并去除空格。
    • 创建数据库表:基于提取的标题动态生成 SQL 语句以创建表(如果不存在)。
    • 插入数据:遍历工作表的每一行,使用 Worksheet.Range[row, col].Value 属性收集数据,然后构造 SQL 插入语句将数据插入相应的数据库表。
  6. 提交并关闭数据库连接:将所有更改提交到数据库并关闭数据库连接。
  7. 释放 Workbook 资源:清理 Workbook 对象所使用的资源。

代码示例

from spire.xls import *
from spire.xls.common import *
import sqlite3

# 创建 Workbook 实例
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("Sample.xlsx")

# 连接到数据库
conn = sqlite3.connect("output/ExcelToDatabase.db")
cursor = conn.cursor()

for s in range(workbook.Worksheets.Count):
    # 获取一个工作表
    sheet = workbook.Worksheets.get_Item(s)

    # 获取工作表名称
    sheetName = sheet.Name
    sheetName = sheetName.replace(" ", "")

    # 获取标题行中的数据
    header = []
    for i in range(sheet.AllocatedRange.ColumnCount):
        headerValue = sheet.Range[1, i + 1].Value
        headerValue = headerValue.replace(" ", "")
        header.append(headerValue)

    # 创建数据库表
    createTableSql = f"CREATE TABLE IF NOT EXISTS {sheetName} ({', '.join([f'{header[i]} TEXT' for i in range(len(header))])})"
    cursor.execute(createTableSql)

    # 插入数据到数据库表中
    for row in range(1, sheet.AllocatedRange.RowCount):
        data = []
        for col in range(sheet.AllocatedRange.ColumnCount):
            # 获取单元格值
            value = sheet.Range[row + 1, col + 1].Value
            data.append(value)
        # 插入单元格值到数据库表中
        insertSql = f"INSERT INTO {sheetName} ({', '.join(header)}) VALUES ({', '.join(['?' for _ in data])})"
        cursor.execute(insertSql, data)

# 提交更改并关闭连接
conn.commit()
conn.close()

workbook.Dispose()

结果
Python导入Excel表格数据到数据库

本文展示了如何使用 Python 代码在 Excel 工作簿和数据库之间进行数据的导入与导出。

有关更多 Excel 文件处理技巧,请访问 Spire.XLS for Python教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1871799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Duix - 硅基数字人SDK

简介 Introduction DUIX(Dialogue User Interface System)是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源,开发者可自行接入多方大模型、语音识别(ASR)、语音合成(TTS)能力,实现数字人实时交互,并在Android和iOS多终端一键部署,让每个开发者可轻松…

自然语言处理基本知识(1)

一 分词基础 NLP:搭建了计算机语言和人类语言之间的转换 1 精确分词,试图将句子最精确的分开,适合文本分析 >>> import jieba >>> content "工信处女干事每月经过下属科室" >>> jieba.cut(content,cut_all …

ClickHouse-Keeper安装使用

1.rpm 安装 clickhouse-keeper rpm -ivh clickhouse-keeper-23.8.11.28.x86_64.rpm 2.修改keeper的配置文件 vi /etc/clickhouse-keeper/keeper_config.xml修改部分参数 1.可修改日志等存储路径 2.增加监听配置 <listen_host>0.0.0.0</listen_host> 3.server_id…

FPC板设计

在板框属性里面选择FPC软板&#xff1a; FPC补强为什么要比焊盘单边大1mm&#xff1a;补强区域需比焊盘大1.0mm以上&#xff0c;才能有效保护焊盘与线路交接处不断裂 补强板放在功能面的背面&#xff1a; 、金手指厚度计算工具&#xff1a;https://tools.jlc.com/jlcTools/#/ca…

5G RAN

两个entity&#xff1a;NodeB、UE entity之间传输数据的东东 entity内部的流水线岗位&#xff1a;L3/L2/L1 岗位之间是消息交互/信令交互

DiAtom 共生菌固氮作用产生的碳输出(ANACONDAS)

Amazon iNfluence on the Atlantic: CarbOn export from Nitrogen fixation by DiAtom Symbioses (ANACONDAS) 亚马逊对大西洋的影响&#xff1a;DiAtom 共生菌固氮作用产生的碳输出&#xff08;ANACONDAS&#xff09; 简介 该研究项目探讨了亚马逊河羽流对热带北大西洋西部…

ELK 企业实战7

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch&#xff1a; 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

Java热门技术点总结:Lambda表达式与Stream API

第一部分&#xff1a;Lambda表达式 1. 简介 Lambda表达式是Java 8引入的一个非常重要的特性&#xff0c;它提供了一种简洁、灵活的函数式编程方式。Lambda表达式允许我们将函数作为参数传递&#xff0c;极大的简化了代码的编写。 2. 基本语法 Lambda表达式的基本语法如下&a…

EAK高压电阻器-引线高压电阻器-厚膜高压电阻器

描述 EAK高压电阻器是扁平高压电阻器&#xff0c;完全满足低感、稳定和精密无源元件的所有要求。 扁平高压电阻器最适合作为组装在 PCB 上的有线元件&#xff0c;但也可以用作 SMD 元件。 我们提供 HVR、HPR、HVI、HVD 和 HVS 系列的扁平高压电阻器&#xff0c;这些电阻器具…

基于weixin小程序农场驿站系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;农场资讯管理&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;用户分享管理&#xff0c;分享类型管理&#xff0c;商品信息管理&#xff0c;商品类型管理 开发系统&#xff1a;Windows 架构模式&…

OWIN(.NET 开放 Web 接口)的幕后故事

在本文中&#xff0c;我们将了解 OWIN 是什么以及它的创建历史。本文将帮助那些想知道它背后的人。 我们将了解一群人如何为 .NET 社区带来宝贵的想法。同样重要的是&#xff0c;微软已经接受了 OWIN&#xff0c;而 ASP.NET Core 基本上就是建立在这个想法之上的。 简单来说&…

概率论论文(关于“到课率”的贝叶斯推理应用)

概率论论文(关于“到课率”的贝叶斯推理应用) 全条件概率公式和贝叶斯公式趣味识 思考1&#xff1a; (引自贝叶斯公式及朴素贝叶斯分类算法应用初探) “狼来了”的故事想必大家都知道&#xff0c;小孩子第三次对村民说狼来了的时候&#xff0c;村民们没有相信他的话&#xff0…

操作系统-中断和异常

中断和异常 用户态&#xff1a;普通应用程序运行在用户态&#xff0c;有很多权限限制 内核态&#xff1a;操作系统运行在内核态&#xff0c;有完全的权限访问和管理所有资源&#xff08;硬件&#xff0c;内存&#xff09; 中断的作用 把CPU从用户态变内核态 异常&#xff08…

谈谈WebComponents | 前端开发

一、 源起 让我们以一个例子开始。 假设我们要做一个环形进度条&#xff0c;它可以&#xff1a; 1、根据进度数值的不同&#xff0c;计算出百分比&#xff0c;以渲染对应的角度值。 2、根据设置的进度不同&#xff0c;我们用不同的颜色加以区分。 3、在环的中间我们以动画递增的…

[电子电路学]电路分析基本概念1

第一章 电路分析的基本概念和基本定律 电路模型 反映实际电路部件的主要电磁性质的理想电路元件及其组合&#xff0c;是实际电路电气特性的抽象和近似。 理想电路元件 实际电路器件品种繁多&#xff0c;其电磁特性多元而复杂&#xff0c;分析和计算时非常困难。而理想电路元件…

240627_关于CNN中图像维度变化问题

240627_关于CNN中图像维度变化问题 在学习一些经典模型时&#xff0c;其中得维度变化关系总搞不太明白&#xff0c;集中学习了以下&#xff0c;在此作以梳理总结&#xff1a; 一般来说涉及到的维度变换都是四个维度&#xff0c;当batch size4&#xff0c;图像尺寸为640*640&a…

正点原子 iwdg wwdg timr

这个iwdg 的超时时间的计算公式 ———————————————— wwdg 超时时间的计算公式 4096是stm32固定死的 wwdg的时钟频率是36mhz&#xff0c;因为apb1分频2得到wwdg的时钟频率&#xff0c;这个是stm32自己就这样做的 看cubemx的时钟图也看得出来 iwdg和wwdg的区分 ti…

[Java基础揉碎]反射

目录 引出反射机制​编辑 介绍反射机制​编辑 反射的优点和缺点 (反射调用优化 )​编辑 Class类 class常用方法 ​编辑 ​编辑 获取class类对象的不同方式 哪些类型有class对象 ​编辑 类加载 ​编辑类加载流程图 类加载的五个阶段 ​编辑 通过反射获取类的结构信…

合芯科技冯春阳博士受邀出席苏州大学技术分享会

近日&#xff0c;苏州大学电子信息学院与合芯科技苏州公司成功举办“新时代与‘芯’相遇&#xff0c;科技赋能向未来”的技术分享会。合芯科技冯春阳博士进行了主题为“高性能CPU关键技术与发展现状”的专题分享&#xff0c;并参加导师聘请仪式。苏州大学电子信息学院党委副书记…

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…