说实话,个人不建议用Python来读取Excel进行入库操作,有条件的话,可以尝试用 ETL 工具,快速导入到MySQL中,或者也可使用 SQL 的导入工具进行。
写本文的目的在于:记录一下之前做过一次这个同类型的东西。也为后面的同期群分析做一个数据准备。
本文所涉及的数据,详见百度云网盘链接:
链接:https://pan.baidu.com/s/1_CTwkdzFbXNH9iZPoYm2bw
提取码:maz8
Python 代码如下:
import pymysql,xlrd
from datetime import datetime"""
目标:Python 读取本地 Excel 文件,插入到 MySQL
"""# 1、读取本地 Excel 数据集
book = xlrd.open_workbook("同期群.xlsx")
sheet = book.sheet_by_name('Sheet1')
print("数据行数:",sheet.nrows,"---","数据列数:",sheet.ncols)# 2、连接数据库,创建游标,创建插入语句
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='zhihu')
cursor = db.cursor()
sql = f"INSERT INTO tongqiqun (nick_name,pay_time,order_status,pay_amount,purchase_quantity,province) VALUES (%s,%s,%s,%s,%s,%s)"def insert_info():# 3、 for 循环迭代读取xls文件每行数据,跳过标题,从第二行开始for r in range(1, sheet.nrows):nick_name = sheet.cell(r, 0).value # 用户昵称# 支付时间 处理# pay_time = sheet.cell(r, 1).value # 会报错!try:pay_time = xlrd.xldate_as_tuple(sheet.cell(r, 1).value, 0) # 转成元组格式pay_time = datetime(*pay_time) # * 作用:当作位置参数,传参!except:pay_time = Noneorder_status = sheet.cell(r, 2).value # 订单状态pay_amount = sheet.cell(r, 3).value # 支付金额purchase_quantity = int(sheet.cell(r, 4).value) # 购买数量province = sheet.cell(r, 5).value # 省份# 4、组装数据(元组格式),执行sqldata = (nick_name,pay_time,order_status,pay_amount,purchase_quantity,province)cursor.execute(sql,data)return Noneinsert_info()