这篇文章,主要介绍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数据中就介绍完啦。文章来源:https://www.toymoban.com/news/detail-606123.html
综上,这篇文章结束了,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。文章来源地址https://www.toymoban.com/news/detail-606123.html
到了这里,关于【Python笔记】Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!