2009-07-25 85 views
4

当试图使用cx_Oralce从lob字段读取数据时,我收到“exceptions.MemoryError”。这段代码一直在工作,这个lob域看起来太大了。cx_Oracle 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” 

回答

5

没错,如果Python是给人的MemoryError这意味着只是刚刚一排的一个领域花费的时间比你有更多的内存(很有可能当然是有一个LOB)。你必须把它分成几块(反复使用select dbms_lob.substr(xml_data, ...),然后把它提供给一个增量式XML解析器(或者把它写出来写到一个文件中,或者你试图用这个多层解析器写的东西) GB LOB)。 DBMS_LOB是Oracle提供的一个文档完善的软件包,您可以在很多地方找到它的文档,例如here