Как правильно форматировать объект StringIO (python и django) для вставки в базу данных?

У меня есть запрос на хранение изображений в базе данных с помощью django, и для этого я создал настраиваемое поле:

from django.db import models class BlobField(models.Field): __metaclass__ = models.SubfieldBase def db_type(self, connection): #TODO handle other db engines backend = connection.settings_dict['ENGINE'] if backend == 'django.db.backends.postgresql': return 'bytea' elif backend == 'django.db.backends.sqlite3': return 'blob' else: raise Exception('unsuported db') def to_python(self, value): #TODO return value def get_db_prep_value(self, value, connection, prepared=False): #TODO return value 

Я уже внедрил специальную систему хранения для обработки хранения / извлечения изображений с использованием пользовательской модели (содержащей вышеупомянутый BlobField). Параметр «значение» в методе get_db_prep_value является объектом StringIO, который содержит двоичные данные изображения. Уловка заключается в том, что я не знаю, что возвращать в методе get_db_prep_value, поскольку объект StringIO обязательно содержит непечатаемые символы.

У меня есть некоторые вопросы о проблеме:

  • Что мне следует возвращать в методе get_db_prep_value?
  • Если ожидаемое значение является строкой ASCII, могу ли я представить blob (шестнадцатеричные escape-последовательности) независимым от базы данных способом?
  • Если нет, есть ли встроенные библиотеки, которые обрабатывают такое преобразование для меня?
  • Что я могу ожидать получить как вход для метода «to_python» и как его преобразовать в объект StringIO?

One Solution collect form web for “Как правильно форматировать объект StringIO (python и django) для вставки в базу данных?”

Нет ограничений, требующих, чтобы get_db_prep_value возвращал «печатные» символы, или ASCII, или другие ограничения с ограничениями: возвращайте любую байтовую строку, которая ловит вашу фантазию. Вы получите строку в to_python и можете сделать экземпляр StringIO подобный StringIO его данными с помощью the_instance = StringIO.StringIO(value) (конечно, вам нужно будет import StringIO в верхней части вашего модуля).

  • Поле Django ManyToMany не создано в модели
  • Проверка подлинности Django с пользовательской моделью с идентификатором электронной почты как уникальным ключом
  • Django NameError во время ссылки на многопользовательский режим
  • Оптимизация производительности базы данных Postgresql в Django?
  • добавить поле first_name и last_name в django-profile
  • Наследование сложной модели - Django
  • Django: Как заменить / перезаписать / обновить / изменить файл FileField?
  • Переопределить Диспетчер пользователей Django только для возвращения активных пользователей в запросах
  • django serialize queryset.values ​​() в json
  • Django Left Outer Join
  • Включить другое поле в качестве выбора внешнего ключа, Django
  • Python - лучший язык программирования в мире.