在数据管理领域,在 excel 文件与数据库之间相互导出数据是一项极为实用的技能。将 excel 文件数据导入至数据库,不仅增强了数据的扩展性和安全性,还使得大量数据集的处理变得更加高效,同时方便多用户在并发控制环境下的协同工作。反之,把数据库数据导出到 excel 表格,能够方便用户利用熟悉的电子表格界面来进行数据分析、可视化处理及报告展示,使复杂的数据能够被更好地理解。而借助 python,开发者能够简单地实现数据库与 excel 电子表格之间的数据迁移,并进行自动化处理。
本文将以 sqlite 数据库为例,介绍如何运用 spire.xls for python 库以及 python 标准库,通过 python 代码实现数据从数据库导出至 excel 文件,以及从 excel 文件导入到数据库的操作。
安装 spire.xls for python
此教程需要 spire.xls for python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 windows 中。
pip install spire.xls
如果您不确定如何安装,请参考: 如何在 windows 中安装 spire.xls for python
用 python 将数据从数据库导出到 excel 文件
spire.xls for python 提供了一系列类、方法和属性,用于创建、读取和编辑 excel 工作簿。开发人员可以使用 python 标准库中的 sqlite3 模块从数据库中读取数据,并利用 spire.xls for python 创建 excel 文件并将数据写入其中,从而将数据库数据导出到 excel 工作表中。
具体步骤如下:
- 连接数据库。
- 创建 workbook 类实例并清除默认工作表。
- 遍历数据库中的表,获取所有列名和列中的数据。
- 使用 workbook.worksheets.add() 方法为每个表创建一个工作表,通过 worksheet.range[].value 属性将列名称写入工作表的标题行,然后将其他数据写入相应单元格。
- 设置工作表格式。
- 使用 workbook.savetofile() 方法保存工作簿。
- python
from spire.xls import *
from spire.xls.common import *
import sqlite3
# 连接到数据库
conn = sqlite3.connect("output/公司信息.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 = "harmonyos sans sc"
sheet.allocatedrange.style.font.size = 12.0
sheet.allocatedrange.autofitrows()
sheet.allocatedrange.autofitcolumns()
# 保存 excel 文件
workbook.savetofile("output/数据库到excel.xlsx", fileformat.version2016)
workbook.dispose()
conn.close()
用 python 将数据从 excel 工作表导入到数据库
spire.xls for python 还可以帮助开发人员从 excel 文件中读取各种类型的数据,然后开发人员可以使用 sqlite3 将数据写入到数据库。以下是详细步骤:
- 创建一个 workbook 类实例。
- 使用 workbook.loadfromfile() 方法加载 excel 工作簿。
- 连接数据库。
- 遍历工作簿中的工作表。
- 使用 workbook.worksheets.get_item() 方法获取工作表,并使用 worksheet.name 属性获取工作表名称。
- 通过 workheet.range[].value 属性获取标题行中的数据。
- 在数据库中创建一个以工作表名称作为表名的表,并在表中创建以标题行数据作为列名的列。
- 通过 workheet.range[].value 属性获取工作表单元格中的值,并将其写入数据库表中的相应位置。
- 提交更改并关闭连接。
- python
from spire.xls import *
from spire.xls.common import *
import sqlite3
# 创建 workbook 实例
workbook = workbook()
# 加载 excel 文件
workbook.loadfromfile("示例.xlsx")
# 连接到数据库
conn = sqlite3.connect("output/excel到数据库.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()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。