cx_Oracle中LOB异常

在使用cx_Oracle对文本内容进行读取时,一般会用到类似如下的方法:

cur.execute(语句)  
result = cur.fetchall()  
for res in result:  
    blob = res.read()

当数据量只有5条时是很正常的,但是当数据量大于20的时候就会出现类似如下的异常:

  
LOB variable no longer valid after subsequent fetch  

对于这样问题,实际上有2种解决方案。
我们只需要将fetchall替换为fetchmany,然后通过cursor.指定要查询的条目数量即可。

cur.arraysize = 15  
for res in cur.fetchmany():  
    blob = res.read()

由于默认fetchmany有默认的查询条数,通过这种方式可以指定要查询的条数,但是当数量到达200的时候也是会出现上述的问题,而其默认值为100。
当然我们也可以在fetchmany函数中指定对应的数量。
另外1种方式是升级cx_Oracle的版本为6.0以上,在版本5中就会出现这样的问题。

  
pip install cx_Oracle==6.0  

参考文章:

https://stackoverflow.com/questions/45739352/programmingerror-lob-variable-no-longer-valid-after-subsequent-fetch

若文章对您有帮助,请打赏1块钱。您的支持,可以让我分享更多精彩的文章。转载请注明来源


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。