读取lob时出现cx_Oracle MemoryError

时间:2009-07-25 14:06:28

标签: python cx-oracle

当尝试使用cx_Oralce从lob字段读取数据时,我收到“exceptions.MemoryError”。这个代码一直在工作,这个一个高架领域似乎太大了。

Example:
xml_cursor = ora_connection.cursor()
xml_cursor.arraysize = 2000
try:
    xml_cursor.execute(“select xml_data from xmlTable where id = 1”)
    for row_data in xml_cursor.fetchall():
        str_xml = str(row_data[0])  #this throws “exceptions.MemoryError”

1 个答案:

答案 0 :(得分:5)

是的,如果Python给出了MemoryError,那意味着只有一行中的那一个字段占用的内存比你拥有的多得多(当然很可能使用LOB)。你必须将它切片并以块(重复select dbms_lob.substr(xml_data, ...)并将其提供给增量XML解析器(或将其写入文件,或者你正在尝试做的任何事情)用那个多GB的LOB)。 DBMS_LOB是一个记录良好的Oracle提供的软件包,您可以在很多地方找到它的文档,例如: here