2011-11-13 27 views
5

Estoy trabajando en una aplicación que está en Django. Estoy tratando de almacenar alguna estructura de datos e.g. dictionary en MySQL db. Entonces uso el módulo Python Pickle. Funciona bien cuando lo almaceno en db usando pickle.dumps(some_structure). Mi campo DB es longblob modo es binary.Deseleccionar clave de carga no válida Error, '{'

Pero cuando tengo acceso al campo de objeto modelo de Django:

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

Plantea siguiente error:

UnpicklingError: invalid load key, '{'. 

Por favor, ayúdame, he tratado de Google, pero does'nt me ayude , también hay uno similar Question pero no está relacionado con mi problema ya que estoy almacenando en db.

+0

Le sugiero que conservar sus datos para almacenarlos en la base de datos no es la forma correcta de hacerlo. Debe almacenar sus datos en la base de datos correctamente, transformando sus datos en tablas y campos. –

+0

Los datos están en 'jerarquía compleja (diccionarios anidados)'. No puedo guardarlo en forma de tablas y campos. Los datos son el resultado de algún proceso que luego necesito procesar en django en otra 'Vista'. –

+1

Entonces JSON es probablemente un formato mejor que pickle. JSON es multiplataforma, mientras que pickle es específico de la implementación. –

Respuesta

11

Me encontré con este error y descubrí que era porque había intentado eliminar algo que originalmente no se había escamado.

Más específicamente, he almacenado un dict de Python sin decapado, lo que lleva al carácter inicial {.

Por lo tanto, para resolver el problema, usted debe tratar ya sea:

  • No deserialiación la cadena sobre la recuperación desde el almacén de datos, o
  • Verificación de que los objetos se conservan en vinagre antes de la inserción en el almacén de datos
Cuestiones relacionadas