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