2009-07-25 3 views
4

Beim Versuch, Daten aus einem Lob-Feld mit cx_Oralce zu lesen, erhalte ich "exceptions.MemoryError". Dieser Code hat funktioniert, dieses eine Lobfeld scheint zu groß zu sein.cx_Oracle MemoryError beim Lesen von 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” 

Antwort

5

Yep, wenn Python Memory geben bedeutet dies, dass nur, dass ein Feld diesen nur eine Zeile mehr Speicher braucht, als Sie (durchaus möglich, mit einem LOB natürlich) haben. Sie müssen es aufteilen und in Chunks (mit select dbms_lob.substr(xml_data, ... wiederholt) abrufen und es einem inkrementellen XML-Parser zuführen (oder es in eine Datei schreiben oder was auch immer Sie mit diesem multiplen XML-Parser versuchen wollen). GB LOB). DBMS_LOB ist ein gut dokumentiertes Oracle-Paket, und Sie können seine Dokumente an vielen Stellen finden, z. here.