2009-07-25 84 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