【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 案例 公…

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<…

入门前端监控

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

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…

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;不推…

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了&#xff0c;在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

zookeeper-3.7.1集群

1.下载&解压安装包apache-zookeeper-3.7.1-bin.tar.gz 解压到/app/ &改名zookeeper-3.7.1 [rootnode1 app]# tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /app/ [rootnode1 app]# mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1 ---- 删除docs [rootnode1…

【2023裸辞失业后之初学RocketMQ】

目录 RocketMQ概述MQ概述常见的MQ产品常见的协议 Rocket的安装和启动基本概念系统架构安装RocketMQ和控制台 RocketMQ概述 MQ概述 Message Queue&#xff1a;是提供消息队列服务的中间件&#xff0c;提供消息生产&#xff0c;存储&#xff0c;消费的全过程。 作用&#xff1a…

矩阵svd分解和矩阵的伪逆

真该好好学习一下Latex数学公式的语法和规则了&#xff0c;否则&#xff0c;连写个博客都没法写&#xff0c;这叫什么事&#xff01; https://blog.csdn.net/ViatorSun/article/details/82826664 直接上数学博士写的ppt图&#xff08;肯定比我在这里胡说八道强的多&#xff0…

css - Media Query

使用bootstrap的grid system可以在一个较为粗糙的范围得到较好的响应性&#xff0c;但是通过viewport可以看到网站在具体哪个像素点处变得丑陋&#xff0c;再通过css media query来精细调整网页布局。 可以通过media query来提高网页移动响应能力。

四、运算符(2)

本章概要 关系运算符 测试对象等价 逻辑运算符 短路 字面值常量 下划线指数计数法 位运算符 关系运算符 关系运算符会通过产生一个布尔&#xff08;boolean&#xff09;结果来表示操作数之间的关系。如果关系为真&#xff0c;则结果为 true&#xff0c;如果关系为假&#xf…

SpringBoot日志文件

1.日志有什么用&#xff1f; 日志是程序的重要组成部分&#xff0c;如果程序报错&#xff0c;我们可以通过日志发现和定位问题&#xff0c;同样日志也可以实现以下的功能&#xff1a; 记录用户登录日志&#xff0c;方便分析用户是否是正常登录还是恶意破解用户&#xff1b;记…

使用 OpenCV 和 GrabCut 算法进行交互式背景去除

一、说明 我想&#xff0c;任何人都可以尝试从图像中删除背景。当然&#xff0c;有大量可用的软件或工具能够做到这一点&#xff0c;但其中一些可能很昂贵。但是&#xff0c;我知道有人使用窗口绘画3D魔术选择或PowerPoint背景去除来删除背景。 如果您是计算机视觉领域的初学者…

network failed to load response data: no resource with given ide...

Chrome 开发者工具无法显示服务器正常返回的 HTTP 请求 - Failed to load response data 今天做开发时遇到一个问题&#xff0c;Chrome 开发者工具 network 标签里&#xff0c;虽然一个 HTTP 请求已经成功从服务器端返回&#xff0c;但是 Chrome 开发者工具里&#xff0c;仍然…