Ошибка атрибута при попытке извлечь изображение в python docx из базы данных

#python #sqlite #python-docx

#python #sqlite #python-docx

Вопрос:

Я пытаюсь перенести текст и изображения, хранящиеся в базе данных, в документ word с помощью python docx, текст извлекается нормально, при попытке извлечь изображения я получаю следующую ошибку. Ошибка атрибута: объект ‘bytes’ не имеет атрибута ‘seek’. Код приведен ниже.

 import sqlite3
from docx import Document

document = Document()
name = "The heading of the report"
document.add_heading(name,0)

connection = sqlite3.connect("demo.db")
cursor = connection.cursor()

cursor.execute("SELECT * FROM Users where UserID = 1")
images in binary format
data = cursor.fetchall()
for row in data:
    zero = row[0]
    one = row[1]
    two = row[2]

document.add_paragraph(str(zero))            
document.add_paragraph(str(one))
document.add_picture(two)

document.save('UserReport.docx')
connection.close()
  

Структура таблицы dB для удобства тестирования выглядит следующим образом:

 CREATE TABLE Users (
    UserID  integer,
    UserName text NOT NULL,
    UserImage Blob,
    PRIMARY KEY(`UserID`)
);
  

Я вижу, что ошибка генерируется из-за этой строки document.add_picture (два). Но не понимаю причины, был бы признателен за ваши комментарии по этому поводу.

Ответ №1:

picture Аргументом .add_picture() должен быть файлоподобный объект. Попробуйте это таким образом:

 from StringIO import StringIO  # would be from io import BytesIO in Python3 
image_stream = StringIO(two)
document.add_picture(image_stream)