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

 更新时间:2024年06月28日 09:40:08   作者:Eiceblue  
数据库和Excel文件是两种常见且重要的数据存储方式,本文将介绍如何使用Python有效地实现数据库与Excel文件之间的数据自动化导入与导出,以SQLite数据库为例,需要的朋友可以参考下

引言

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

本文将介绍如何使用Python有效地实现数据库与Excel文件之间的数据自动化导入与导出,以SQLite数据库为例。

本文所使用的方法需要用到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表格数据导入到数据库

我们也可以使用 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文件之间的数据自动化导入与导出的详细内容,更多关于Python数据库与Excel导入与导出的资料请关注脚本之家其它相关文章!

相关文章

  • 一步步教你用python给女朋友写个微信自动提醒的程序

    一步步教你用python给女朋友写个微信自动提醒的程序

    如今微信已成为我们日常生活的主要交流工具,但是微信自身的功能有时候可能并不能满足我们的需要,因此我们会想是否可以进行微信功能的拓展呢,这篇文章主要给大家介绍了关于利用python给女朋友写了个微信自动提醒程序的相关资料,需要的朋友可以参考下
    2021-10-10
  • 浅谈Python大神都是这样处理XML文件的

    浅谈Python大神都是这样处理XML文件的

    这篇文章主要介绍了详解Python大神都是这样处理XML文件的,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • python用PyInstaller打包成windows可执行的exe(细致版)

    python用PyInstaller打包成windows可执行的exe(细致版)

    PyInstaller的基本功能是将Python脚本打包成可执行文件,这意味着用户无需安装Python环境,就能运行打包后的程序,这篇文章主要介绍了python如何用PyInstaller打包成windows可执行exe的相关资料,需要的朋友可以参考下
    2025-04-04
  • Python中选择结构实例讲解

    Python中选择结构实例讲解

    在本篇文章里小编给大家整理了关于Python选择结构的基础知识点及相关实例,有需要的朋友们可以学习参考下。
    2022-11-11
  • python实现五子棋程序

    python实现五子棋程序

    这篇文章主要为大家详细介绍了python实现五子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 使用Python可视化展示排序算法

    使用Python可视化展示排序算法

    这篇文章主要介绍了使用Python可视化展示排序算法,让我们创建一个名为algorithm .py的文件,在这个文件中,我们将用python编写所有的排序算法,需要的朋友可以参考下
    2024-11-11
  • Python之tkinter文字区域Text使用及说明

    Python之tkinter文字区域Text使用及说明

    这篇文章主要介绍了Python之tkinter文字区域Text使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python采集百度搜索结果带有特定URL的链接代码实例

    python采集百度搜索结果带有特定URL的链接代码实例

    这篇文章主要介绍了python采集百度搜索结果带有特定URL的链接代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python+Dlib+Opencv实现人脸采集并表情判别功能的代码

    Python+Dlib+Opencv实现人脸采集并表情判别功能的代码

    这篇文章主要介绍了Python+Dlib+Opencv实现人脸采集并表情判别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python面向对象编程repr方法示例详解

    Python面向对象编程repr方法示例详解

    这篇文章主要介绍了Python面向对象编程repr方法的示例详解,文中附含详细的代码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09

最新评论