Как правильно форматировать объект 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 в верхней части вашего модуля).

Interesting Posts

Django: определить, какой пользователь удаляет при использовании сигнала post_delete

datetime to string with series in python pandas

Как я могу убедиться, что пользователь вводит только «y» или «n» в программу?

Объединение мультииндексированных с одноиндексными кадрами данных в пандах

Как я могу изменить уровень ведения журнала на dev_appserver.py в движке Google?

sqlite3.ProgrammingError: Неправильное количество привязок. В текущем заявлении используется 1, и имеется 5

Синхронизация строки даты в Python

psycopg2: вставить несколько строк с одним запросом

подпроцесс readline висит в ожидании EOF

поиск последнего вхождения элемента в список python

Усечь строку, не заканчивающуюся посередине слова

Копирование многопоточного файла намного медленнее, чем один поток на многоядерном процессоре

Создание 3D-графика из массива 3D numpy

Значение параметра тензорного потока Tensorflow variable_scope означает значение параметра

Сравните две даты в python и игнорируйте микросекунды

Python - лучший язык программирования в мире.