使用cx_Oracle读取LONG RAW

时间:2011-01-20 11:48:28

标签: python cx-oracle

我有一个包含LONG RAW列的旧数据库。存储在此列中的数据大约为~100KB。 我正在尝试使用cx_Oracle访问这些二进制数据。

它正在工作,但我能提取的最大尺寸是 ~41KB

这是我的代码(来自http://dbaportal.eu/?q=node/147

cursor = db.cursor()    
cursor.arraysize = 1
cursor.setoutputsize(1200000000)

cursor.execute("select data from mytable")
print cursor.description
for row in cursor:
    data = row[0]
    f = open("/tmp/data",'wb')
    f.write(data)
    f.close()
    # Only first line
    break

输出是这样的:

$ python oracle.py
[('GRIB', <type 'cx_Oracle.LONG_BINARY'>, -1, 0, 0, 0, 1)]
$ ls -lh /tmp/data
41186 2011-01-20 12:42 /tmp/pygrib

我知道LONG RAW并不容易处理。有些方法会告诉您重新创建一个包含BLOB列的新表。但我买不起,因为我已经有了这种格式的数据......

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用BLOB列创建一个全局临时表,然后在获取LONG RAW值之前使用TO_LOB转换函数将其插入此表中。然后,您可以从临时表中选择BLOB值。