2009-07-25 3 views
4

При попытке чтения данных из поля lob с использованием cx_Oralce я получаю «exceptions.MemoryError». Этот код работает, это одно поле для заполнения кажется слишком большим.cx_Oracle MemoryError при чтении lob

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.

Смежные вопросы