Преобразование нескольких BLOB-объектов в PDF - PullRequest
0 голосов
/ 28 марта 2019

У меня есть несколько фрагментов BLOB-объектов размером 28 Кбайт, кроме последнего, который может быть одинаковым или меньшим.x.pdf имеет 94 фрагмента.Код перебирает 94 фрагмента и завершается без ошибок.Кто-нибудь работал с несколькими каплями, чтобы создать один файл.

Уже создали файлы размером 275 КБ с использованием PL / SQL, теперь они имеют размер около 4 КБ, что кажется слишком большим для функции 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

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

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

изменение wb + для решения проблемы, спасибо.

0 голосов
/ 29 марта 2019

Условие 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:

...