Python读取excel文件数据并插入数据库

该博客演示了如何使用Python的pymysql库连接MySQL数据库,并通过xlrd库读取Excel文件,将学生信息批量插入到数据库中。首先,通过pymysql建立数据库连接并执行SQL查询以验证连接;然后,读取Excel文件并将数据存储在列表中;最后,遍历列表,将每个学生信息插入到student表中,实现数据的批量导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子: 将excel文件StudentInfo.xls的学生信息插入到student表中

在这里插入图片描述
注: 使用的版本:Python3.7,MySQL5.5

一、连接mysql数据库

  1. 安装第三方库pymysql:pip install pymysql(Python2中则使用mysqldb)
  2. 调用pymysql.connect()方法连接数据库,代码如下
import pymysql

# 打开数据库连接
conn = pymysql.connect(
    host='localhost',  # MySQL服务器地址
    user='root',  # MySQL服务器端口号
    password='root',  # 用户名
    charset='utf8',  # 密码
    port=3308,  # 端口
    db='test',  # 数据库名称
)

# 使用cursor()方法获取操作游标
c = conn.cursor()
sql = "show databases"
# 使用execute方法执行SQL语句
c.execute(sql)
# 使用 fetchone() 方法获取一条数据
res = c.fetchone()
print(res)
# 关闭数据库连接
conn.close()

3.运行程序,如果控制台没有报错,且能正常执行sql语句,则代表连接数据库成功;

在这里插入图片描述

  1. 连接数据库成功后,先插入一条数据看看效果 👇
# 使用cursor()方法获取操作游标
c = conn.cursor()
sql = "insert into student(Sno,Sname,Ssex,Sage,Sdept) value ('2012151','刚子','男','29','CS')"
# 使用execute方法执行SQL语句
c.execute(sql)
# 插入数据,需执行conn.commit()
conn.commit()
# 关闭数据库连接
conn.close()

注:使用pymysql操作数据库时,增删改与查询是有区别的,在增删改操作时一定要记得conn.commit(),提交当前事务。

在这里插入图片描述

二、读取excel文件

  1. 读取excel文件需要用到xlrd库,安装方法:pip install xlrd
  2. 对excel文件中的数据进行读取 👇
import xlrd

FilePath = 'E:/PDBC/StudentInfo.xls'

# 1.打开excel文件
wkb = xlrd.open_workbook(FilePath)
# 2.获取sheet
sheet = wkb.sheet_by_index(0)  # 获取第一个sheet表['学生信息']
# 3.获取总行数
rows_number = sheet.nrows
# 4.遍历sheet表中所有行的数据,并保存至一个空列表cap[]
cap = []
for i in range(rows_number):
    x = sheet.row_values(i)  # 获取第i行的值(从0开始算起)
    cap.append(x)
print(cap)

在这里插入图片描述

  1. 上面读取到的结果为列表类型,每个小列表代表一个学生的信息。因为student表中有五个字段,分别是:Sno、Sname、Ssex、Sage、Sdept,所以我们要拿到每个学生的这五个属性值 👇
for Stu in cap:
    Sno = int(Stu[0])
    Sname = Stu[1]
    Ssex = Stu[2]
    Sage = Stu[3]
    Sdept = Stu[4]
    print(Sno, Sname, Ssex, Sage, Sdept)

在这里插入图片描述
三、批量插入数据库

获取到每个学生的属性值后,就可以逐个插入到数据中了,总代码如下

import pymysql
import xlrd

"""
一、连接mysql数据库
"""
# 打开数据库连接
conn = pymysql.connect(
    host='localhost',  # MySQL服务器地址
    user='root',  # MySQL服务器端口号
    password='root',  # 用户名
    charset='utf8',  # 密码
    port=3308,  # 端口
    db='test',  # 数据库名称
)

# 使用cursor()方法获取操作游标
c = conn.cursor()

"""
二、读取excel文件
"""
FilePath = 'E:/PDBC/StudentInfo.xls'

# 1.打开excel文件
wkb = xlrd.open_workbook(FilePath)
# 2.获取sheet
sheet = wkb.sheet_by_index(0)  # 获取第一个sheet表['学生信息']
# 3.获取总行数
rows_number = sheet.nrows
# 4.遍历sheet表中所有行的数据,并保存至一个空列表cap[]
cap = []
for i in range(rows_number):
    x = sheet.row_values(i)  # 获取第i行的值(从0开始算起)
    cap.append(x)
print(cap)  # [['9022478', '郭赛', '男', 34.0, 'CS'], ['9022472', '林伟', '男', 36.0, 'MA'], ···]

"""
三、将读取到的数据批量插入数据库
"""
for Stu in cap:
    Sno = int(Stu[0])
    Sname = Stu[1]
    Ssex = Stu[2]
    Sage = Stu[3]
    Sdept = Stu[4]
    # 使用f-string格式化字符串,对sql进行赋值
    c.execute(f"insert into student(Sno,Sname,Ssex,Sage,Sdept) value ('{Sno}','{Sname}','{Ssex}','{Sage}','{Sdept}')")   
conn.commit()
conn.close()
print("插入数据完成!")

在这里插入图片描述

### 将文件数据插入数据库的过程 为了实现通过Python读取文件数据插入数据库中的操作,通常会经历几个主要阶段。首先是文件读取过程,在这个过程中,程序打开解析目标文件的内容;其次是将这些内容转化为适合存入数据库的形式——这可能涉及到将文件转换成二进制格式[^1]。 对于具体的实施方法,可以采用如下方式: #### 文件读取与处理 针对不同类型的文件(如CSV、Excel),有不同的库可以帮助完成这一任务。例如,`pandas` 是一个非常流行的用于数据分析和处理的库,它能够轻松加载 Excel 或 CSV 文件将其内容转储为易于管理的数据结构。 ```python import pandas as pd # 假设我们要导入的是一个名为 'example.xlsx' 的 Excel 文件 data = pd.read_excel('example.xlsx') ``` 这段代码利用 `pandas` 库来读取 Excel 文件创建了一个 DataFrame 对象 `data` 来保存表格内的所有记录[^2]。 #### 数据准备与转换 一旦获得了所需的数据集之后,下一步就是准备好要写入数据库的信息。如果计划存储整个文件,则应考虑先将其编码为二进制形式再进行上传。这里展示了一种简单的做法: ```python binary_data = open('example.xlsx', 'rb').read() ``` 上述命令打开了指定路径下的文件以只读模式 (`r`) 和二进制模式 (`b`) 打开该文件,从而获取其原始字节序列作为变量 `binary_data` 存储起来。 #### 插入数据库 最后一步涉及实际向数据库提交已处理好的数据。假设正在使用的是一种支持SQL语句的关系型数据库管理系统(RDBMS),那么可以通过执行 SQL INSERT 语句来进行这项工作。下面是一个例子,展示了怎样使用 SQLite 数据库连接器 `sqlite3` 完成本次任务: ```python import sqlite3 conn = sqlite3.connect(':memory:') # 创建一个新的SQLite内存数据库实例 cursor = conn.cursor() # 创建表单以便接收来自文件数据 create_table_query = ''' CREATE TABLE IF NOT EXISTS documents ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, content BLOB NOT NULL ); ''' cursor.execute(create_table_query) insert_query = "INSERT INTO documents (filename, content) VALUES (?, ?)" cursor.execute(insert_query, ('example.xlsx', binary_data)) # 提交更改关闭连接 conn.commit() conn.close() ``` 以上脚本首先建立了通往临时 SQLite 数据库的新链接,接着定义了一个用来容纳文档及其关联元数据(比如文件名)的表单。随后,构建了另一条查询指令,旨在把之前获得的文件名称连同对应的二进制流一起加入新建的表内。最终,确认所有的修改都已被安全地应用到了数据库上,终止了当前对话。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值