使用cx_Oracle读取长RAW数据
我有一个老旧的数据库,里面有一些叫做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
你可以创建一个全局临时表,这个表里有一个 BLOB
列。然后在获取 LONG RAW
值之前,使用 TO_LOB
转换函数把它插入到这个临时表里。之后,你就可以从临时表中选择 BLOB
值了。