读取LOB时cx_Oracle内存错误

4 投票
1 回答
1137 浏览
提问于 2025-04-15 13:09

在使用cx_Oracle从一个lob字段读取数据时,我遇到了“exceptions.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”

1 个回答

5

没错,如果Python出现了内存错误(MemoryError),那就说明你要处理的某一行的某个字段占用了比你电脑能提供的内存还要多的空间(特别是处理大对象时,这种情况很常见)。你需要把这个字段分成小块来处理,可以使用 select dbms_lob.substr(xml_data, ... 这个命令多次提取数据,然后把这些小块交给一个增量的XML解析器(或者你也可以把它写入文件,或者根据你的需求做其他处理)。DBMS_LOB 是Oracle提供的一个文档齐全的工具包,你可以在很多地方找到它的使用说明,比如 这里

撰写回答