将多个blob转换为pdf

问题描述 投票:0回答:2

我有多个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之间

python file pdf blob cx-oracle
2个回答
0
投票

条件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:


0
投票

with open('x.pdf', mode='a') as file:

改变wb +来解决问题,谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.