**
python 导入Oracle数据库报错TypeError: expecting string or bytes object解决
**
第一次使用博客,之后打算开始记录当天python使用中学习到的新的知识点,今天在学习如何使用python将数据插入Oracle时,总是遇到ypeError: expecting string or bytes object这个错误,网上搜索了好多内容,关于这个错误的很少,之后经过各种尝试,初步猜测是导入的数据中字符类型有误,有一个博客说是空值nan的原因,于是用如下代码将空值替换
data2 = data1.replace('nan','')
,
替换后查看data2,结果还是显示为nan,
就自以为python对于空值都会直接显示nan,直接运行
cursor.executemany(v_sql, data2)
还是报错就以为不是空值的原因,就又接着百度了,找了许久,无意间将data展开发现空值的字符类型竟然是float,立马知道问题出在哪里了,于是我又去百度如何空值替换,最终将空值替换了,再次运行,总算成功了,代码如下
index = [':%s' % i for i in range(1, len(data.columns.values) + 1)]
v_sql = f'insert into {table_name} values({",".join(index)})'
data1 = data.where(data.notnull(), '') # python中空值nan字符类型为float,插入数据库报错,故需改为''
data2 = [tuple(r) for r in data1.values.tolist()] # data1数据类型为dataFrame,需改为包含元组的列表才能插入数据库
try:
cursor.executemany(v_sql, data2) # 批量数据插入
conn.commit()
print('导入成功!')
except cx_Oracle.Error as err:
print(err)
# 5.关闭游标
cursor.close()
# 6.关闭连接
conn.close()
现在想想这里犯了一个主观出错,导致本来已经发现问题,却没能及时解决,反而忽略了,以后有疑问一定要去查个清楚,很有可能就是问题关键所在,不能帮问题找理由!!!
之前在校期间一直用的是R,现在转学python,发现还是要将一门语言的基础知识、基本运行规则,弄懂弄明白,才能更加灵活使用。