Я планирую использовать render_template для отображения данных
Чтобы обслуживать изображения из поля большого двоичного объекта, вам нужно создать отдельный маршрут, который будет обслуживать конкретные данные изображения, а затем в шаблон включайте ссылки, которые загружают файлы с этого маршрута.
Здесь нет необходимости использовать PIL, так как поле blob дает вам байтовые данные. Вы запускаете это через BytesIO, чтобы получить объект _io.BytesIO
, который можно передать прямо в функцию Flask send_file
.
from io import BytesIO
from flask import send_file
@app.route('/image/<int:ident>')
def image_route(ident):
# This can only serve one image at a time, so match by id
cursor.execute("select image from dept_master WHERE id = ?", (ident,)
result = cursor.fetchone()
image_bytes = result[0]
bytes_io = BytesIO(image_bytes)
return send_file(bytes_io, mimetype='image/jpeg')
На этом этапе вы сможете нажать /image/1
и посмотрите изображение в вашем браузере для строки с идентификатором 1
.
Затем, где-нибудь в шаблоне, просто включите ссылку для этого с:
<img src='{{ url_for("image_route", ident=image_ident) }}' />
Это предполагает, что image_ident
доступно в шаблоне. Возможно, вам придется заменить это имя переменной чем-то, что существует (это может быть переменная в пределах для l oop, которая обозначает идентификатор изображения для извлечения).
Дайте мне знать, если это требует дальнейшего объяснения.