Как правильно форматировать объект 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 DateField
  • Использование моделей и форм за пределами Django?
  • Таблица Django с миллионом строк
  • Автоматическое заполнение поля created_by с административным сайтом Django
  • Django - получение отдельных дат из метки времени
  • python django - страница не найдена ошибка (404) - статическая ошибка
  • Сохранение пользовательской модели с помощью django-allauth
  • Django: добавление строк встроенных форм без javascript
  • Python - лучший язык программирования в мире.