Сохранять изображение, сохраненное в столбце LargeBinary SQLAlchemy

Я хочу загрузить файл и сохранить его в базе данных. Я создал столбец LargeBinary.

logo = db.Column(db.LargeBinary) 

Я прочитал загруженный файл и сохранил его в базе данных.

 files = request.files.getlist('file') if files: event.logo = files[0].file.read() 

Является ли это правильным способом хранения изображения как двоичного в базе данных? Как преобразовать двоичные данные в изображение еще раз, чтобы отобразить его?

One Solution collect form web for “Сохранять изображение, сохраненное в столбце LargeBinary SQLAlchemy”

Если вам абсолютно необходимо сохранить изображение в базе данных, то да, это правильно. Как правило, файлы хранятся в файловой системе, и путь хранится в базе данных. Это лучшее решение, потому что веб-сервер обычно имеет эффективный способ обслуживания файлов из файловой системы, в отличие от приложения, отправляющего большие капли данных динамически.


Чтобы подать изображение, напишите представление, которое получает данные изображения и отправляет его в качестве ответа.

 @app.route('/event/<int:id>/logo') def event_logo(id): event = Event.query.get_or_404(id) return app.response_class(event.logo, mimetype='application/octet-stream') 
 <img src="{{ url_for('event_logo', id=event.id }}"/> 

Предпочтительно использовать его с использованием правильного типа mimetype, а не application/octet-stream .


Вы также можете вставлять данные изображения непосредственно в html с помощью uri данных. Это неоптимально, поскольку данные uris отправляются каждый раз, когда страница отображается, а файл изображения может быть кэширован клиентом.

 from base64 import b64encode @app.route('/event/<int:id>/logo') def event_logo(id): event = Event.query.get_or_404(id) image = b64encode(event.logo) return render_template('event.html', event=event, logo=image) 
 <p>{{ obj.x }}<br/> {{ obj.y }}</p> <img src="data:;base64,{{ logo }}"/> 
  • Как разбивать страницы на Flask-SQLAlchemy для связанных с db.session запросов?
  • Примеры проектов SQLAlchemy
  • Как я могу использовать UUID в SQLAlchemy?
  • не удалось создать автоинкрементный первичный ключ с фляжкой-sqlalchemy
  • SQLAlchemy: как фильтровать поле даты?
  • SQLAlchemy возвращает tuple не словарь
  • Имеет ли SQLAlchemy эквивалент get_or_create Django?
  • Триггер в sqlachemy
  • Python - лучший язык программирования в мире.