我有多個 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 = 0with 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之間
2 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
條件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/150
提交
取消