Python 利用pandas和mysql-connector获取Excel数据写入到MySQL数据库

如何将Excel数据插入到MySQL数据库中

在实际应用中,我们可能需要将Excel表格中的数据导入到MySQL数据库中,以便于进行进一步的数据分析和处理。本文将介绍如何使用Python将Excel表格中的数据插入到MySQL数据库中。

导入必要的库

首先,我们需要导入pandas库和MySQL Connector/Python库,以便于读取Excel文件和连接MySQL数据库。

复制代码
import pandas as pd  # 导入pandas库,用于读取Excel文件和处理数据
import mysql.connector  # 导入MySQL Connector/Python库,用于连接MySQL数据库

连接数据库

接下来,我们需要连接MySQL数据库。可以通过MySQL Connector/Python库提供的connect()方法来连接数据库。

复制代码
# 连接数据库
mydb = mysql.connector.connect(
    host=host,  # 数据库主机地址
    user=user,  # 数据库用户名
    password=password,  # 数据库密码
    database=database  # 数据库名称
)

其中,host、user、password和database分别是数据库主机地址、数据库用户名、数据库密码和数据库名称,需要根据实际情况进行修改。

创建游标对象

连接成功后,我们需要创建游标对象。可以通过MySQL Connector/Python库提供的cursor()方法来创建游标对象。

复制代码
# 创建游标对象
mycursor = mydb.cursor()

读取Excel文件

接下来,我们需要读取Excel文件中的数据。可以使用pandas库提供的read_excel()方法来读取Excel文件。

复制代码
# 读取Excel文件
df = pd.read_excel(filename)

其中,filename是Excel文件的路径,需要根据实际情况进行修改。

将日期时间类型的列转换为字符串类型

在将数据插入到MySQL数据库中之前,我们需要将日期时间类型的列转换为字符串类型。可以通过遍历DataFrame中的每一列,并判断该列的数据类型是否为日期时间类型,然后将该列的数据类型转换为字符串类型。

复制代码
# 将日期时间类型的列转换为字符串类型
for col in df.columns:  # 遍历DataFrame中的每一列
    if df[col].dtype == 'datetime64[ns]':  # 如果该列的数据类型是日期时间类型
        df[col] = df[col].astype(str)  # 将该列的数据类型转换为字符串类型

遍历Excel表格中的每一行,并将每一行插入到数据库中

接下来,我们需要遍历Excel表格中的每一行,并将每一行插入到数据库中。可以使用pandas库提供的itertuples()方法来遍历DataFrame中的每一行,并使用MySQL Connector/Python库提供的execute()方法来执行SQL插入语句。

复制代码
# 遍历Excel表格中的每一行,并将每一行插入到数据库中
for row in df.itertuples(index=False):  # 遍历DataFrame中的每一行
    sql = f"INSERT INTO {table} (id, 姓名, 国家, 出生日期) VALUES (%s, %s, %s, %s)"  # SQL插入语句
    val = row  # 插入的数据
    mycursor.execute(sql, val)  # 执行SQL插入语句
    print("正在插入数据:", val)  # 输出正在插入的数据

其中,table是数据库表名,需要根据实际情况进行修改。

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

最后,我们需要提交更改并关闭数据库连接。可以使用MySQL Connector/Python库提供的commit()方法来提交更改,并使用close()方法来关闭游标对象和数据库连接。

复制代码
# 提交更改并关闭数据库连接
mydb.commit()  # 提交更改
mycursor.close()  # 关闭游标对象
mydb.close()  # 关闭数据库连接

完整代码如下:

复制代码
import pandas as pd  # 导入pandas库,用于读取Excel文件和处理数据
import mysql.connector  # 导入MySQL Connector/Python库,用于连接MySQL数据库

def insert_excel_data_to_mysql(filename, host, user, password, database, table):
    # 连接数据库
    mydb = mysql.connector.connect(
        host=host,  # 数据库主机地址
        user=user,  # 数据库用户名
        password=password,  # 数据库密码
        database=database  # 数据库名称
    )

    # 创建游标对象
    mycursor = mydb.cursor()

    # 读取Excel文件
    df = pd.read_excel(filename)

    # 将日期时间类型的列转换为字符串类型
    for col in df.columns:  # 遍历DataFrame中的每一列
        if df[col].dtype == 'datetime64[ns]':  # 如果该列的数据类型是日期时间类型
            df[col] = df[col].astype(str)  # 将该列的数据类型转换为字符串类型

    # 遍历Excel表格中的每一行,并将每一行插入到数据库中
    for row in df.itertuples(index=False):  # 遍历DataFrame中的每一行
        sql = f"INSERT INTO {table} (id, 姓名, 国家, 出生日期) VALUES (%s, %s, %s, %s)"  # SQL插入语句
        val = row  # 插入的数据
        mycursor.execute(sql, val)  # 执行SQL插入语句
        print("正在插入数据:", val)  # 输出正在插入的数据

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

# 使用示例
filename = r'C:\\Users\\Admin\\Desktop\\重新开始\\Python操作MySQL数据库\\sheet1.xlsx'  # Excel文件路径
host = "localhost"  # 数据库主机地址
user = "root"  # 数据库用户名
password = "123456"  # 数据库密码
database = "caiwu"  # 数据库名称
table = "yonghu"  # 数据库表名

insert_excel_data_to_mysql(filename, host, user, password, database, table)  # 调用函数,将Excel数据插入到MySQL数据库中
相关推荐
骇客野人31 分钟前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
死磕音视频1 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林1 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
美狐美颜SDK开放平台2 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
pride.li3 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook3 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺3 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
花间相见3 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见4 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing20234 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip