在数据处理和管理中,有时候需要将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()