2009-07-25 9 views
4

cx_Oralceを使用してロブフィールドからデータを読み取ろうとしているときに "exceptions.MemoryError"が表示されます。このコードは動作していますが、この1つのロブフィールドは大きすぎるようです。 PythonはMemoryErrorを与えている場合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

うん、それはそれだけで1行のただ1つのフィールドは、(当然のLOBでかなり可能)あなたが持っているよりも多くのメモリを取ることを意味します。それをスライスして、それを塊(select dbms_lob.substr(xml_data, ...と繰り返し)で取得し、それをインクリメンタルXMLパーサーにフィードしなければなりません(または、ファイルに書き出すか、そのマルチスレッドで何をしようとしているのか、 GB LOB)。 DBMS_LOBは、文書化されたオラクル社提供のパッケージであり、さまざまな場所でドキュメントを見つけることができます。 here