首页 > 数据库 >Python 利用pymysql和openpyxl操作MySQL数据库并插入Excel数据

Python 利用pymysql和openpyxl操作MySQL数据库并插入Excel数据

时间:2023-10-29 23:45:34浏览次数:45  
标签:openpyxl Python 数据库 Excel pymysql 插入 MySQL

1. 需求分析

本文将介绍如何使用Python连接MySQL数据库,并从Excel文件中读取数据,将其插入到MySQL数据库中。

2. 环境准备

在开始本文之前,请确保您已经安装好了以下环境:

  • Python 3.x
  • PyMySQL库
  • openpyxl库
  • MySQL数据库

3. 连接MySQL数据库

我们可以使用pymysql库来连接MySQL数据库。请先创建一个名为test的MySQL数据库,并在其中创建一个名为yonghu的表。

import pymysql

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

在上述代码中,我们调用了pymysql库中的connect()函数来连接MySQL数据库。其中,host参数是MySQL服务器的主机名或IP地址,user参数是登录MySQL服务器的用户名,passwd参数是登录MySQL服务器的密码,db参数是要连接的数据库名。

4. 打开Excel文件

在Python中,可以使用openpyxl库来读写Excel文件。请先安装好openpyxl库。

from openpyxl import load_workbook

# 打开Excel文件
wb = load_workbook(filename=r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
sheet = wb.active

在上述代码中,我们使用load_workbook()函数加载Excel文件,并使用active属性获取活动工作表。

5. 获取表头

在插入数据之前,我们需要先获取Excel表格的表头信息。

# 获取表头
header = [cell.value for cell in sheet[1]]

在上述代码中,我们遍历第一行的单元格,获取每个单元格的值,作为表头。

6. 遍历Excel数据并插入数据库

接下来,我们遍历Excel文件中的每一行数据,并将其插入到MySQL数据库中。

# 遍历每一行数据,并将其插入到数据库中
cursor = mydb.cursor()
count = 0
for row in sheet.iter_rows(min_row=2, values_only=True):
    sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
    cursor.execute(sql, row)
    count += 1
    print(f"正在插入{count}条数据")

# 提交更改并关闭数据库连接
mydb.commit()
cursor.close()
mydb.close()

在上述代码中,我们使用iter_rows()函数从第二行开始遍历每一行数据。在遍历过程中,我们构建了一个插入数据的SQL语句,使用占位符%s,然后使用游标对象执行SQL语句,将行数据插入到MySQL数据库中。

最后,我们提交了对数据库的更改,并关闭了游标对象和与MySQL数据库的连接。

7. 完整代码

最终的Python代码如下:

from openpyxl import load_workbook  # 导入load_workbook函数,用于加载Excel文件
import pymysql  # 导入pymysql库,用于连接和操作MySQL数据库

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

# 打开Excel文件
wb = load_workbook(filename=r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')  # 加载Excel文件
sheet = wb.active  # 获取活动工作表

# 获取表头
header = [cell.value for cell in sheet[1]]  # 获取第一行的单元格值,作为表头

# 遍历每一行数据,并将其插入到数据库中
cursor = mydb.cursor()  # 创建游标对象,用于执行SQL语句
count = 0  # 计数器,用于记录插入的数据条数
for row in sheet.iter_rows(min_row=2, values_only=True):  # 从第二行开始遍历每一行数据
    sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
    # 构建插入数据的SQL语句,使用占位符%s
    cursor.execute(sql, row)  # 执行SQL语句,将行数据插入到数据库中
    count += 1  # 每插入一条数据,计数器加1
    print(f"正在插入{count}条数据")  # 输出插入的数据条数

# 提交更改并关闭数据库连接
mydb.commit()  # 提交对数据库的更改
cursor.close()  # 关闭游标对象
mydb.close()  # 关闭与数据库的连接

8. 总结

本文介绍了如何使用Python连接MySQL数据库,并从Excel文件中读取数据,将其插入到MySQL数据库中。如果您有任何疑问或建议,请在评论区留言。

 

标签:openpyxl,Python,数据库,Excel,pymysql,插入,MySQL
From: https://www.cnblogs.com/lcl-cn/p/17796786.html

相关文章

  • 用Python计算圆周率pi
    一、要求1.要求能算到小数点后面越多越好(5分)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬......
  • 用python计算圆周率PI
    fromrandomimportrandomfrommathimportsqrtimporttimeDARTS=10**7hits=0.0a=1start=time.perf_counter()foriinrange(1,DARTS+1):x,y=random(),random()dist=sqrt(x**2+y**2)ifdist<=1.0:hits=hits+1ifi==DARTS*0.01*a:print......
  • python面向对象-学习笔记(六、方法相关的补充)
    私有化方法私有方法classPerson:__age=18#私有方法def__run(self):print("run")#def_Person__run(self):#print("Personrun")p=Person()#p.__run()#p._Person__run()print(Person.__dict__)内置特殊方法......
  • python pandas安装失败的解决方法之一
    从https://www.lfd.uci.edu/~gohlke/pythonlibs/中下载对应的whl文件例:pandas‑1.4.3‑cp39‑cp39‑win32.whl,39指python3.9用下好放到python目录下的Scripts文件夹中,例我的是C:\Users\Administrator\AppData\Local\Programs\Python\Python39-32\Scripts再在路径栏全选输入cmd(......
  • 在Python中手动引发(抛出)异常
    内容来自DOChttps://q.houxu6.top/?s=在Python中手动引发(抛出)异常如何在Python中引发异常,以便稍后可以通过except块捕获?在Python中,可以使用raise语句来引发异常。要通过except块捕获异常,需要使用适当的异常类型并提供一个错误消息。以下是一个示例:try:#这里是可能引......
  • python进阶14大模块200页知识体系md笔记,第3篇:linux命令进阶
    本完整笔记从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。完整版笔记直接地址:请移步这里......
  • pythonDay4
     可变不可变类型 判断用true和false    成员运算符:in  ......
  • python两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比
    两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单实例#!/usr/bin/python#-*-coding:UTF-8-*-foriinrange(ord('x'),ord('z')+1):forjinra......
  • python vtk读取dicom序列+鼠标键盘交互
    目标:vtk+pyqt实现四视图。之前不了解vtk,也不了解鼠标键盘交互。网上搜索了资料,发现博客里大都是C++的例子。困扰几天,今天终于做出来一部分,分享一下。参考官方教程:examples.vtk.org/site/Python/IO/ReadDICOM/examples.vtk.org/site/Python/IO/ReadDICOMSeries/第一步:py......
  • 解决Python报错ImportError: No module named ‘xxxx‘问题
    BASE_DIR=os.path.dirname(os.getcwd())#用来从jupyter默认地址中脱离出来importsyssys.path.append(BASE_DIR)sys.path.append('E:\CV_Paper_fuxian\lesson\B_VGG')#把文件所在的相对路径要添加进去。才不会报错然后运行,就完美解决了。......