我正在尝试将Daraframe数据插入到Oracle表中,但得到错误"ORA-00932:不一致的数据类型:获得CLOB的预期数量“。它是由数据库中的一列引起的,该列是Number类型且可以为None,而我在Daraframe中该列的数据是None。
我的原始数据来自sqlite3。我用谷歌搜索了很多地方,人们说sqlalchemy在处理Oracle的日期时间类型时可能有问题。我试着逐个删除列,实际上,date time列是可以的,但是Oracle数据库中有一列是Number和Nullable,而我对该列的Daraframe是None。如果我删除了这一列,那么一切都很好。
try:
dest_server_cnn.begin_nested()
cdf.to_sql(name=tab['table'].lower(), con=dest_server_cnn, if_exists='append', index=False)
pbar.update(total)
except:
e_type, e_message, e_traceback = sys.exc_info()
failed_count += total
例外情况
<class 'sqlalchemy.exc.DatabaseError'> Error: (cx_Oracle.DatabaseError) ORA-00932: inconsistent datatypes: expected NUMBER got CLOB
[SQL: INSERT INTO alloc_test ....]
我不能为该列赋值,因为该值与业务逻辑相关联。那么我该如何处理这个None列呢?
发布于 2019-05-17 15:47:19
我找到了原因和解决方案。这是因为Pandas在读取空列时将所有列、字符串和int都视为对象。
我必须将列转换为整数,然后它才能工作。
to_sql(... dtype={"int column with null": Integer()})
https://stackoverflow.com/questions/56181433
复制相似问题