读取excel使用executemany批量插入数据库报错TypeError: expecting string or bytes object

背景:

1、读取excel数据上传到oracle数据库。先用pandas读取excel,然后将pandas转换成np.array。最后将np.array转换成list

2、使用executemany批量插入数据库时报错TypeError: expecting string or bytes object

#读取excel
df = pd.read_excel(request.FILES.get("excel_data"), sheet_name=0)    
# Nan 替换为 None
none_df = df.where(df.notnull(), None) 
#转换为ndarray
np_data = np.array(none_df)
#转换为list
data_list = np_data.tolist()
#sql
insert_sql="insert into table (column1,column2,column3) values (%s, %s, %s)"
#预处理
cursor.prepare(insert_sql)
#插入数据库
cursor.executemany(insert_sql, data_list)   
cursor.commit()

问题原因:

由于excel中某一列中既有数字又有字符串,导致executemany没有识别到这一列的格式

解决方法:

在pandas使用类型转换转换成自定义的格式,这样就不会报错

#读取excel
df = pd.read_excel(request.FILES.get("excel_data"), sheet_name=0)    
# Nan 替换为 None
none_df = df.where(df.notnull(), None)
#-----在这一步指定列的类型-------------------
none_df["col"]=none_df["col"].astype("str")
#------------------------------------------
#转换为ndarray
np_data = np.array(none_df)
#转换为list
data_list = np_data.tolist()
#sql
insert_sql="insert into table (column1,column2,column3) values (%s, %s, %s)"
#预处理
cursor.prepare(insert_sql)
#插入数据库
cursor.executemany(insert_sql, data_list)   
cursor.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值