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

news2025/2/26 17:40:32

这篇文章,主要介绍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 val
    if 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 val
    if val_type == 5:  # error类型
        return val
    else:
        return val


# 格式化数字类型
def format_num(num):
    if isinstance(num, int):
        return num
    if isinstance(num, float):
        num = str(num).rstrip('0')  # 删除小数点后多余的0
        num = int(num.rstrip('.')) if num.endswith('.') else float(num)  # 只剩小数点直接转int,否则转回float
        return 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.coloradmin.cn/o/787267.html

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

相关文章

AndroidStudio设计一个计算器

界面设计 activity_calcuator.xml 设计&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto&qu…

处理json 和HttpMessageConverterT

文章目录 简单处理json 和HttpMessageConverter<T>处理JSON-ResponseBody应用案例完成示意图代码应用 处理JSON-RequestBody应用案例说明代码实现 处理JSON-注意事项和细节应用实例:小结 HttpMessageConverter<T>基本说明工作机制简图处理JSON-底层实现(HttpMessag…

区块链挖矿的机制原理解析

什么是区块链挖矿&#xff1f; 全球大概有10亿台电脑随时保持运行的状态&#xff0c;但是它们的利用率只有20%&#xff0c;剩余的80%时间都在闲置状态&#xff0c;如果让它们成为云计算节点&#xff0c;在闲暇之余也能成为挖矿机&#xff0c;主人也可以无形中得到一份额外收益…

Ansys Zemax | 设计衍射光学元件(DOE)和超透镜(metalens)

在这篇文章中&#xff0c;我们简要介绍了使用 OpticStudio 设计衍射光学元件&#xff08;DOE&#xff09;和超透镜&#xff08;metalens&#xff09;的过程。我们讨论了相位面和局部光栅的概念。附件中还提供了一些有用的DLLs&#xff0c;以支持特殊的 DOE 或 metalens 设计方法…

windows C++多线程同步<2>-事件

windows C多线程同步&#xff1c;2&#xff1e;-事件 事件对象和关键代码段不同&#xff0c;它是属于内核对象&#xff1b;又分为人工重置事件对象和自动重置事件对象&#xff1b; 同一个线程不允许在不释放事件的情况下多次获取事件&#xff1b; 相关API 白话来讲&#xff1…

尚硅谷大数据项目《在线教育之采集系统》笔记001

视频地址&#xff1a;尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P004 P006 P007 P009 P010 P017 P025 P026 P027 P028 P030 P004 将数据以图形图表的方式展示出来&#xff01; P006 数据埋点 所谓埋点就是在应用中特定的流程收集一些信息&…

【Linux命令200例】cksum用于计算文件的校验和

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

[SSM]Spring IoC注解式开发

目录 十二、Spring IoC注解式开发 12.1回顾注解 12.1.1自定义注解 12.1.2使用注解 12.1.3通过反射机制读取注解 12.2声明Bean的注解 12.3Spring注解的使用 12.4选择性实例化Bean 12.5负责注入的注解 12.5.1Value 12.5.2Autowired与Qualifier 12.5.3Resource 12.6全…

Maven发布中央仓库始终报403

把域名 oss.sonatype.org 全部替换为&#xff1a;s01.oss.sonatype.org

Spring Cloud【SkyWalking服务环境搭建、微服务接入SkyWalking探针、Docker搭建Elasticsearch环境 】(十四)

目录 分布式请求链路追踪_SkyWalking服务环境搭建 分布式请求链路追踪_微服务接入SkyWalking探针 分布式请求链路追踪_Docker搭建Elasticsearch环境 分布式请求链路追踪_SkyWalking使用Elasticsearch持久化 分布式请求链路追踪_SkyWalking自定义链路追踪 分布式请求链路…

疲劳驾驶检测和识别3:Android实现疲劳驾驶检测和识别(含源码,可实时检测)

疲劳驾驶检测和识别3&#xff1a;Android实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 目录 疲劳驾驶检测和识别3&#xff1a;Android实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 1.疲劳驾驶检测和识别方法 2.人脸检测方法 3.疲劳驾驶检测和识别模型…

24 鼠标常用事件

鼠标进入&#xff1a;enterEvent鼠标离开&#xff1a;leaveEvent鼠标按下&#xff1a;mousePressEvent鼠标释放&#xff1a;mouseRelaseEvent鼠标移动&#xff1a;mouseMoveEvent 提升为自定义控件MyLabel 代码&#xff1a; //mylabel.h #ifndef MYLABEL_H #define MYLABEL_H#…

linux LVM磁盘管理

Linux运维过程中经常会遇到扩容的场景&#xff0c;下面做一点简单笔记&#xff0c;所谓好记性不如烂笔头。 1、新建磁盘挂载 &#xff08;1&#xff09;先看看主机上有没有挂载磁盘或挂载的磁盘有没有剩余的。 如下图可以看到这台机器挂了两个盘&#xff0c;一个/dev/sda,这…

【项目管理】第三节:PMP备考学习建议

文章目录 1.项目管理的价值观与方法论2.PMP开始的形式和题型 1.项目管理的价值观与方法论 对于中国考生而言&#xff0c;PMP”考试有两关要过:第一关是认知升级&#xff0c;考生通过学习和梳理项目管理知识&#xff0c;提升自己对项目管理的认知;第二关是思维升级&#xff0c;…

【Vue3】Vue3中的组合式API是什么?hook是什么?什么是“组合式函数”?项目中如何使用自定义 hook 函数?

组合式API与hook 一、什么是组合式 API&#xff1f;&#xff08;composition-api&#xff09;二、什么是组合式函数&#xff1f;&#xff08;hook&#xff09;2.1 无状态的函数&#xff08;utils&#xff09;2.2 有状态的函数&#xff08;hooks&#xff09;2.3 utils与hooks的联…

yolov5s模型剪枝详细过程(v6.0)

本文参考github上大神的开源剪枝项目进行学习与分享&#xff0c;具体链接放在文后&#xff0c;希望与大家多多交流&#xff01; 一、原模型训练 在官方源码上训练yolov5模型&#xff0c;支持v6.0分支的n/s/m/l模型&#xff0c;我这里使用的是v5s&#xff0c;得到后将项目clone到…

Cesium态势标绘专题-椭圆(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

图像处理之Hough变换检测直线

hough变换-直线检测 一、 前言二、Hough 变换三、直线检测四、代码实现1.hough检测2.画直线代码3.画hough空间代码4.检测结果 一、 前言 霍夫变换是一种特征检测(feature extraction)&#xff0c;被广泛应用在图像分析&#xff08;image analysis&#xff09;、计算机视觉(com…

[算法通关村] 1.2 链表的插入

上一节我们谈到了链表的概念&#xff0c;以及链表的创建方法&#xff0c;忘记的小伙伴可以复习一下&#xff1a; [算法通关村] 1.1 单向链表的创建 今天我们来探究一下链表的插入&#xff0c;链表的插入共有 3 种可能性&#xff0c;分别是在链表的头部插入、在中间插入&#x…

CMake学习-All in one

参考引用 CMake与Make最简单直接的区别通过例子学习CMakeLIO-SAM 1. 引言 1.1 什么是 CMake 1.1.1 CMake 背景 1.1.2 CMake 定义 CMake 是一个跨平台的安装&#xff08;编译&#xff09;工具&#xff0c;可以用简单的语句来描述所有平台的安装&#xff08;编译&#xff09;过…