2011-11-13 1 views
5

Я работаю над приложением, которое находится в Django. Я пытаюсь сохранить некоторую структуру данных e.g. dictionary в MySQL db. Поэтому я использую модуль Python Pickle. Он отлично работает, когда я храню его в db, используя pickle.dumps(some_structure). Мое поле БД longblob режим: binary.UnpicklingError недопустимый ключ загрузки, '{'

Но когда я получить доступ к области модели объекта в Джанго:

obj = someModel.get(pk=1) 
some_structure = obj.field 
content = pickle.loads(some_structure) 

он поднимает следующие ошибки:

UnpicklingError: invalid load key, '{'. 

Пожалуйста, помогите мне, я попробовал Google, но does'nt помочь мне , также есть один подобный Question, но он не связан с моей проблемой, так как я храню в db.

+0

Я бы предположил, что травление ваших данных, чтобы сохранить его в базе данных, - неправильный способ обойти это. Вы должны правильно хранить свои данные в базе данных, преобразовывая свои данные в таблицы и поля. –

+0

Данные находятся в 'сложной иерархии (вложенных словарях)'. Я не могу сохранить его в виде таблиц и полей. Данные являются результатом некоторого процесса, который позже мне нужно обработать в django на другом 'View'. –

+1

Тогда JSON, вероятно, лучше, чем рассол. JSON является кросс-платформенным, тогда как рассол является специфичным для реализации. –

ответ

11

Я столкнулся с этой ошибкой, и я обнаружил, что это было из-за того, что я пытался раскрыть что-то, что изначально не было маринованным.

В частности, я сохранил питон-питон без маринования, что привело к исходному символу {.

Таким образом, чтобы решить эту проблему, вы должны попробовать либо:

  • Не unpickling строки после извлечения из хранилища или
  • Проверки, что объекты в настоящее время маринованные перед введением в датастор