Как правильно форматировать объект 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
  • Агрегирование Django: суммирование умножения двух полей
  • Django 1.5 + Отношение пользовательской модели
  • Как работают модели Django?
  • Django находит пути между двумя вершинами в графе
  • Как остановить авто-капитализацию verbose_name в django
  • Pycharm - модели автозагрузки в консоли Django
  • Django - создание пользователя с пользовательской моделью приводит к внутренней ошибке
  • Python - лучший язык программирования в мире.