经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
Python使用pymysql和xlrd2将Excel数据导入MySQL数据库
来源:cnblogs  作者:qwerrt9  时间:2023/10/30 9:16:11  对本文有异议

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

导入所需库

  1. import xlrd2 # 导入xlrd2库,用于读取Excel文件
  2. import pymysql # 导入pymysql库,用于连接和操作MySQL数据库
  3. from datetime import datetime # 导入datetime库,用于处理日期和时间

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

连接到MySQL数据库

  1. mydb = pymysql.connect(
  2. host="localhost",
  3. user="root",
  4. passwd="123456",
  5. db="test"
  6. )

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

打开Excel文件并获取表头

  1. workbook = xlrd2.open_workbook(r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
  2. sheet = workbook.sheet_by_index(0) # 获取第一个工作表
  3. header = [cell.value for cell in sheet.row(0)]

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

 创建游标对象

  1. cursor = mydb.cursor()

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

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

  1. for row_idx in range(1, sheet.nrows): # 从第二行开始遍历
  2. row_data = []
  3. for cell in sheet.row(row_idx):
  4. if cell.ctype == xlrd2.XL_CELL_DATE:
  5. cell_value = xlrd2.xldate.xldate_as_datetime(cell.value, workbook.datemode)
  6. row_data.append(cell_value.strftime('%Y-%m-%d %H:%M:%S'))
  7. else:
  8. row_data.append(cell.value)
  9. sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
  10. cursor.execute(sql, row_data)
  11. print(f"正在插入第{row_idx}条数据")

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

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

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

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

  1. mydb.commit()
  2. cursor.close()
  3. mydb.close()

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

完整代码如下:

  1. import xlrd2 # 导入xlrd2库,用于读取Excel文件
  2. import pymysql # 导入pymysql库,用于连接和操作MySQL数据库
  3. from datetime import datetime # 导入datetime库,用于处理日期和时间
  4. # 连接到MySQL数据库
  5. mydb = pymysql.connect(
  6. host="localhost",
  7. user="root",
  8. passwd="123456",
  9. db="test"
  10. )
  11. # 打开Excel文件
  12. workbook = xlrd2.open_workbook(r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
  13. sheet = workbook.sheet_by_index(0) # 获取第一个工作表
  14. # 获取表头(即Excel文件的第一行数据)
  15. header = [cell.value for cell in sheet.row(0)]
  16. # 创建游标对象,用于执行SQL语句
  17. cursor = mydb.cursor()
  18. # 遍历每一行数据,并将其插入到数据库中
  19. for row_idx in range(1, sheet.nrows): # 从第二行开始遍历
  20. row_data = []
  21. for cell in sheet.row(row_idx):
  22. # 处理时间类型的字段
  23. if cell.ctype == xlrd2.XL_CELL_DATE: # 判断单元格的数据类型是否为日期类型
  24. cell_value = xlrd2.xldate.xldate_as_datetime(cell.value, workbook.datemode)
  25. # 将日期类型转换为字符串格式,并按照指定的格式进行调整
  26. row_data.append(cell_value.strftime('%Y-%m-%d %H:%M:%S'))
  27. else:
  28. row_data.append(cell.value) # 将其他类型的数据直接添加到行数据列表中
  29. # 构建插入数据的SQL语句
  30. sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
  31. # 执行SQL语句,将行数据插入到数据库中
  32. cursor.execute(sql, row_data)
  33. # 显示当前正在插入第几条数据
  34. print(f"正在插入第{row_idx}条数据")
  35. # 提交更改并关闭数据库连接
  36. mydb.commit()
  37. cursor.close()
  38. mydb.close()

 

原文链接:https://www.cnblogs.com/lcl-cn/p/17796070.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号