【Python笔记】Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面

这篇文章,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。

目录

一、Python读取excel

1.1、安装xlrd库

1.2、打开excel工作簿

1.3、获取sheet工作表

1.4、操作row数据行

1.5、操作column数据列

1.6、操作单元格

二、读取excel数据保存到MySQL

2.1、完整代码

2.2、运行效果


一、Python读取excel

Python中操作excel文件有很多的库,这篇文章就介绍【xlrd】库读取excel文件,并且结合【pymysql】库将读取的表格数据插入到MySQL数据库里面。

1.1、安装xlrd库

执行下面命令就可以安装xlrd依赖库:

pip install xlrd==1.2.0

注意:这里安装的是xlrd1.2.0,不要安装太高的版本,有些高版本的xlrd已经不支持读取xlsx文件了。xlrd版本过高,运行时候会报错:

raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported') 
xlrd.biffh.XLRDError: Excel xlsx file; not supported

1.2、打开excel工作簿

xlrd库中提供了【open_workbook()】和【open_workbook_xls()】两个方法,这里个方法的作用就是打开excel文件,获取到工作簿对象。

# 导入依赖库
import xlrd# 读取excel文件
workbook = xlrd.open_workbook(filename)

1.3、获取sheet工作表

工作簿对象中,提供了【sheets()】方法,可以获取到所有的sheet工作表数组,可以通过索引获取指定的sheet页,也可以使用【sheet_by_index()】或者【sheet_by_name()】方法,通过索引或名称获取指定的sheet页表。

  • sheets()方法:获取所有sheet工作表对象。
  • sheet_names()方法:获取工作簿中所有sheet页表的名称。
  • sheet_by_index(idx)方法:根据索引获取sheet页表。
  • sheet_by_name()方法:根据名称获取sheet页表。
# 导入依赖库
import xlrd# 读取excel文件
workbook = xlrd.open_workbook(filename)# 获取sheet工作表,获取第一个sheet
sheets = workbook.sheets()[0]

1.4、操作row数据行

  • nrows属性:获取sheet工作表中有效的数据行数量。
  • row_lens(index)方法:获取index行的长度,也就是单元格个数。
  • row(index)方法:获取index行数据,数据以【单元格类型:单元格数据】的格式返回一个list列表。
  • row_values(index)方法:获取指定行的所有单元格数据,返回一个[]列表。
  • row_types(index)方法:获取指定行的所有单元格类型,返回一个[]列表。row_type类型有六种,分别如下所示:
    • 0表示empty类型,空类型;
    • 1表示string字符串类;
    • 2表示number数值类型;
    • 3表示date日期类型;
    • 4表示boolean布尔类型;
    • 5表示error类型。

1.5、操作column数据列

  • ncols属性:获取sheet工作表中有效的列数。
  • col_types(index)方法:获取index整列的单元格类型。
  • col_values(index)方法:获取index整列的单元格数值。

1.6、操作单元格

  • value属性:Cell单元格对象可以调用value属性,获取对应的单元格数据。
  • cell(row,col)方法:获取row行col列的单元格对象,以【单元格类型:单元格数据】格式返回。
  • cell_type(row,col)方法:获取row行col列的单元格类型。
  • cell_value(row,col)方法:获取row行col列的单元格数据。

二、读取excel数据保存到MySQL

2.1、完整代码

# 导入依赖库
import xlrd
import pymysql
from xlrd import xldate_as_tuple
from datetime import date# 定义变量
filename = r'F:\import_data.xlsx'# 根据单元格类型,格式化数据
def format_all(val, val_type, date_mode):if val_type == 0:  # empty 空类型return ''if val_type == 1:  # string字符串类型return valif val_type == 2:  # number数值类型return format_num(val)if val_type == 3:  # date日期类型return format_date(val, date_mode)if val_type == 4:  # boolean布尔类型return valif val_type == 5:  # error类型return valelse:return val# 格式化数字类型
def format_num(num):if isinstance(num, int):return numif isinstance(num, float):num = str(num).rstrip('0')  # 删除小数点后多余的0num = int(num.rstrip('.')) if num.endswith('.') else float(num)  # 只剩小数点直接转int,否则转回floatreturn num# 格式化时间
def format_date(dt, date_mode):return date(*xldate_as_tuple(dt, date_mode)[:3]).strftime('%Y-%m-%d')# 读取excel文件
workbook = xlrd.open_workbook(filename)# 获取sheet工作表,获取第一个sheet
sheets = workbook.sheets()[0]# 读取所有数据行rows
rows = sheets.nrows# 遍历每一行数据
insertData = []
for row in range(0, rows):rowData = sheets.row_values(row)rowType = sheets.row_types(row)# 数据类型格式化for index in range(0, len(rowData)):rowData[index] = format_all(rowData[index], rowType[index], workbook.datemode)insertData.append(rowData)print('待插入数据:', insertData)
# 数据写入mysql数据库
# 创建数据库连接
conn = pymysql.connect(host='localhost', user='root', passwd='root', db='db-demo', charset='utf8')
# 创建游标对象
curses = conn.cursor()
# 编写sql语句
sql = 'INSERT INTO t_your_table (id, num, time, val) VALUES (%s, %s, %s, %s);'
# 执行批量插入
curses.executemany(sql, insertData)
# 提交事务
conn.commit()
# 关闭连接
curses.close()
conn.close()

2.2、运行效果

到此,Python读取excel数据插入到MySQL数据中就介绍完啦。

综上,这篇文章结束了,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。

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

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

相关文章

Bean 作用域和生命周期

1.通过⼀个案例来看 Bean 作⽤域的问题 假设现在有⼀个公共的 Bean,提供给 A ⽤户和 B ⽤户使⽤,然⽽在使⽤的途中 A ⽤户却“悄悄”地修 改了公共 Bean 的数据,导致 B ⽤户在使⽤时发⽣了预期之外的逻辑错误。 1.1 被修改的 Bean 案例 公…

【N32L40X】学习笔记04-gpio中断库

gpio中断 该函数库的目的就是在统一的地方配置,将配置的不同项放置在一个结构体内部使用一个枚举来定义一个的别名 NVIC 寄存器 NVIC 相关的寄存器定义了可以在 core_cm4.h 文件中找到。我们直接通过程序的定义来分 析 NVIC 相关的寄存器,其定义如下…

RocketMQ(1.NameServer源码)

NameServer功能简述 主要功能如下 服务注册与发现:Nameserver扮演了RocketMQ集群中服务注册中心的角色。当RocketMQ中的Broker、Producer和Consumer启动时,它们会向Nameserver注册自己的网络地址和角色信息。Nameserver维护着集群中所有活跃实例的信息…

openfeign调用文件服务的文件上传接口报错:Current request is not a multipart request

解决办法&#xff1a; Api 接口 Api(tags "文件上接口") RestController public class FileController {Autowiredprivate FileFeignService fileFeignService;ApiOperation("上传文件")PostMapping(value "/uploadFile")public ResData<…

python常用数据类型区别

1.set集合和dict字典的区别 set没有对应的value值&#xff0c;两者都是可变类型&#xff0c;即不可哈希;两者的内部元素是不可变类型&#xff0c;即可哈希&#xff0c;都无索引&#xff0c;不可进行切片和根据索引进行的操作。 2.set集合和list列表的区别 相同点 都是可变类…

zookeeper学习(一) Standalone模式(单机模式)安装

安装准备 centos7环境jdk1.8环境zookeeper安装包 安装jdk 上传jdk安装包解压安装包到目录中 tar -zxvf jdk-8u361-linux-x64.tar.gz如果需要指定目录可以在后面加上 -C&#xff0c;如 tar -zxvf jdk-8u361-linux-x64.tar.gz -C 目录配置jdk环境变量 vim /etc/profile打开…

Dijkstra 算法——求解最短路径问题

迪杰斯特拉算法&#xff08;Dijkstra’s algorithm&#xff09;是一种用于解决单源最短路径问题的贪心算法。它可以找到从一个起始顶点到其他所有顶点的最短路径&#xff0c;并且适用于边的权重非负的图。 算法步骤如下&#xff1a; 创建一个数组 dist&#xff0c;用于保存起…

react当我们有两个完全不相关的组件想要通信时,就可以利用这种模式,其中一个组件负责订阅某个消息,而另一个元素则负责发送这个消息。使用Context配合

在nextjs项目中&#xff0c;发现两个组件没啥关系&#xff0c;例如一个是一直存在的头部组件&#xff0c;另一个是页面中的组件&#xff0c;当我点击头部组件中的特定按钮时&#xff0c;把数据传递到页面组件中&#xff0c;页面组件接受到canshu数据后在做其他操作&#xff0c;…

入门前端监控

背景 前端监控是指通过一系列手段对Web页面或应用程序进行实时监控和数据采集&#xff0c;以了解页面或应用程序的性能状况、用户行为等等&#xff0c;并及时发现和解决潜在的问题。一个完整的前端监控平台可以包括&#xff1a;数据收集与上报、数据整理与存储、数据展示这里仅…

redis---持久化和数据类型的基本操作

目录 1.redis持久化 2.redis数据类型 1.redis持久化 【1】RDB 启用rdb&#xff0c;查看是否有对应文件生成 1.进入配置文件&#xff0c;修改配置 [rootclient ~]# vim /etc/redis.conf save 60 5 # 自动出发机制&#xff08;60秒内进行5次操…

Java连锁门诊医院HIS信息管理系统源码

Java连锁门诊医院HIS信息管理系统源码&#xff1a;SaaS运维平台多医院多机构多门诊入驻强大的电子病历完整开发文档 一、系统概述 ❉采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同…

通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的

假设有一个测试用例,需求是:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。 实现:在canoe的simulation setup界面插入一个test节点,ip地址为:192.168.0.1,mac地址为…

具身智能,是机器人的“冷饭热炒”吗?

大模型正如火如荼&#xff0c;下一个AI风口就来了。 如果你关注2023世界人工智能大会等行业峰会&#xff0c;以及英伟达、微软、谷歌、特斯拉和国內科技大厂的最新发布会&#xff0c;除了“大模型”&#xff0c;应该会听到另一个高频词——具身智能。 所谓具身智能Embodied AI …

IRIS搭建docker

之前把web实现了docker&#xff0c;开发或测试环境可能需要开发自己搭数据库&#xff0c;为了方便使用&#xff0c;把数据库也做一个docker。 由于原生的CentOS我还有改yum仓库&#xff0c;所以这次从之前lis搞的改好yum的镜像开始&#xff08;从改好yum的lisnew的镜像创建lis…

【Linux】Ubuntu基本使用与配置, 以及常见问题汇总(一)

前言 大学期间&#xff0c;感觉很多时候学习课外知识都是被推着往前走&#xff0c;很多内容并没有深入去学习&#xff0c;知识的记录受限于所学比较片面&#xff0c;如今渐渐意识到似乎并没有建立起相关知识的体系架构&#xff0c;缺乏一个系统学习并整理的过程。本文将以Ubunt…

【LangChain】检索器之MultiQueryRetriever

MultiQueryRetriever 概要内容总结 概要 基于距离的向量数据库检索在高维空间中嵌入查询&#xff0c;并根据“距离”查找相似的嵌入文档。 但是&#xff0c;如果查询措辞发生细微变化&#xff0c;或者嵌入不能很好地捕获数据的语义&#xff0c;检索可能会产生不同的结果。有时…

grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行

文章目录 0 引言1 安装依赖和编译1.1 安装依赖1.2 下载编译 2 运行示例2.1 simple_demo2.2 tutorial_demo2.3 iterators_demo2.4 image_to_gridmap_demo2.5 grid_map_to_image_demo2.6 opencv_demo2.7 resolution_change_demo2.8 filters_demo2.9 interpolation_demo 0 引言 苏…

labview 多线程同步

所谓通讯的同步是指多个线程同时进行或严格按照顺序执行&#xff0c;数据的严格性是指发送多少数据接收多少数据&#xff0c;不能出现数据丢失或重复接收的现象。 labview的同步机制有事件发生、集合点、通知器、信号量。 可以这么来记忆&#xff1a;事急&#xff08;集&…

JavaScript |(一)JavaScript简介及基本语法 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 &#x1f4da;JavaScript简介&#x1f407; 实现&#x1f407;JavaScript的特点 &#x1f4da;基本知识&#x1f407;编写位置&#x1f525;方式一&#xff1a;在标签中写&#xff08;不推…

独立游戏《黑夜狩猎者》

做独立游戏已经4个月了&#xff0c;在下作品黑夜狩猎者已经上线TapTap平台。目前正加入薪火计划&#xff0c; 如果你也想加入&#xff0c;下方链接 TapTap 薪火计划