我有多个blob块,所有28K字节大小,除了最后一个可以相同或更少。 x.pdf有94个块。代码循环遍历94个块,结束时没有错误。任何人都使用多个blob来创建单个文件。
已经使用PL / SQL创建了275K文件,现在卡住了大约4K,这对UTL_FILE函数来说似乎太大了。
con = cx_Oracle.connect('sysadm/password@mydb')
cur = con.cursor()
sql = 'select count(*) from chunk_record where filename = :sfn'
cur.execute(sql, sfn = 'x.pdf')
z = cur.fetchone()[0]
y = 0
with codecs.open('x.pdf', encoding='utf-8', mode='wb+') as file:
bcur = con.cursor()
for y in range (z):
print(y)
bsql = 'select file_data from chunk_record where filename = :sfn and file_seq = :seq'
bcur.execute(bsql, sfn = 'x.pdf', seq = y)
if type(bcur.fetchone()[0]) is cx_Oracle.BLOB:
file.write(bcur.fetchone()[0].read())
bcur.close()
file.close()
cur.close()
con.close()
python代码下面生成x.pdf,大小为零。当我尝试以pdf打开时,它会出错。尺寸应在28K * 93~28K * 94之间
条件type(row[0]) is cx_Oracle.BLOB
总是假的。由于cx_Oracle.BLOB
是结果集描述中出现的列类型,但类是cx_Oracle.LOB
所以要检查它:
row = bcur.fetchone()
if isinstance(row[0], cx_Oracle.LOB):
file.write(row[0].read())
文件最终为空的原因是它从未被写入。
其余的答案都是正确的。
你为什么用编码打开文件?它应该是不应转码的二进制数据。
替换with codecs.open('x.pdf', encoding='utf-8', mode='wb+') as file:
随着with open('x.pdf', mode='wb+') as file:
with open('x.pdf', mode='a') as file:
改变wb +来解决问题,谢谢。