Python使用pymysql和xlrd2将Excel数据导入MySQL数据库

在数据处理和管理中,有时候需要将Excel文件中的数据导入到MySQL数据库中进行进一步的分析和操作。本文将介绍如何使用Python编程语言实现这个过程。

导入所需库

复制代码
import xlrd2  # 导入xlrd2库,用于读取Excel文件
import pymysql  # 导入pymysql库,用于连接和操作MySQL数据库
from datetime import datetime  # 导入datetime库,用于处理日期和时间

这部分代码导入了xlrd2库用于读取Excel文件,pymysql库用于连接和操作MySQL数据库,以及datetime库用于处理日期和时间。

连接到MySQL数据库

复制代码
mydb = pymysql.connect(
    host="localhost",
    user="root",
    passwd="123456",
    db="test"
)

通过pymysql.connect()函数连接到MySQL数据库。需要提供数据库的主机名、用户名、密码和数据库名称。

打开Excel文件并获取表头

复制代码
workbook = xlrd2.open_workbook(r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
sheet = workbook.sheet_by_index(0)  # 获取第一个工作表

header = [cell.value for cell in sheet.row(0)]

使用xlrd2.open_workbook()函数打开Excel文件,并使用sheet_by_index()方法获取第一个工作表。然后通过sheet.row(0)获取第一行的单元格对象,并使用列表推导式将每个单元格的值添加到header列表中。

创建游标对象

复制代码
cursor = mydb.cursor()

使用mydb.cursor()方法创建游标对象,用于执行SQL语句。

遍历每一行数据并插入到数据库中

复制代码
for row_idx in range(1, sheet.nrows):  # 从第二行开始遍历
    row_data = []
    for cell in sheet.row(row_idx):
        if cell.ctype == xlrd2.XL_CELL_DATE:
            cell_value = xlrd2.xldate.xldate_as_datetime(cell.value, workbook.datemode)
            row_data.append(cell_value.strftime('%Y-%m-%d %H:%M:%S'))
        else:
            row_data.append(cell.value)

    sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
    cursor.execute(sql, row_data)

    print(f"正在插入第{row_idx}条数据")

通过for循环遍历Excel文件的每一行数据(从第二行开始)。在内部循环中,判断单元格的数据类型是否为日期类型,如果是,则将其转换为字符串格式并按照指定的格式进行调整;否则,直接将其添加到row_data列表中。

然后,使用', '.join(header)', '.join(['%s'] * len(header))构建插入数据的SQL语句,其中header为表头的字段名,'%s' * len(header)表示占位符的数量与字段数相同。

最后,使用游标对象的execute()方法执行SQL语句,并传入row_data作为参数,将行数据插入到数据库中。

提交更改并关闭数据库连接

复制代码
mydb.commit()
cursor.close()
mydb.close()

使用mydb.commit()提交对数据库的更改,并使用cursor.close()关闭游标对象。最后,使用mydb.close()关闭与数据库的连接。

完整代码如下:

复制代码
import xlrd2  # 导入xlrd2库,用于读取Excel文件
import pymysql  # 导入pymysql库,用于连接和操作MySQL数据库
from datetime import datetime  # 导入datetime库,用于处理日期和时间

# 连接到MySQL数据库
mydb = pymysql.connect(
    host="localhost",
    user="root",
    passwd="123456",
    db="test"
)

# 打开Excel文件
workbook = xlrd2.open_workbook(r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
sheet = workbook.sheet_by_index(0)  # 获取第一个工作表

# 获取表头(即Excel文件的第一行数据)
header = [cell.value for cell in sheet.row(0)]

# 创建游标对象,用于执行SQL语句
cursor = mydb.cursor()

# 遍历每一行数据,并将其插入到数据库中
for row_idx in range(1, sheet.nrows):  # 从第二行开始遍历
    row_data = []
    for cell in sheet.row(row_idx):
        # 处理时间类型的字段
        if cell.ctype == xlrd2.XL_CELL_DATE:  # 判断单元格的数据类型是否为日期类型
            cell_value = xlrd2.xldate.xldate_as_datetime(cell.value, workbook.datemode)
            # 将日期类型转换为字符串格式,并按照指定的格式进行调整
            row_data.append(cell_value.strftime('%Y-%m-%d %H:%M:%S'))
        else:
            row_data.append(cell.value)  # 将其他类型的数据直接添加到行数据列表中

    # 构建插入数据的SQL语句
    sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
    # 执行SQL语句,将行数据插入到数据库中
    cursor.execute(sql, row_data)

    # 显示当前正在插入第几条数据
    print(f"正在插入第{row_idx}条数据")

# 提交更改并关闭数据库连接
mydb.commit()
cursor.close()
mydb.close()
相关推荐
我想学LINUX1 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
数据小爬虫@4 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片4 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
ℳ₯㎕ddzོꦿ࿐7 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
CodeClimb7 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
一水鉴天7 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
Channing Lewis7 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask
B站计算机毕业设计超人7 小时前
计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫
大数据·hadoop·python·spark·课程设计·数据可视化·推荐算法
觅远8 小时前
python+playwright自动化测试(四):元素操作(键盘鼠标事件)、文件上传
python·自动化
ghostwritten9 小时前
Python FastAPI 实战应用指南
开发语言·python·fastapi