2011-11-13 8 views
5

Sto lavorando a un'applicazione che è in Django. Sto cercando di memorizzare alcuni dati struttura e.g. dictionary in MySQL db. Quindi io uso il modulo Python Pickle. Funziona bene quando lo memorizzo in db usando pickle.dumps(some_structure). Il mio campo DB è longblob la modalità è binary.UnpicklingError chiave di caricamento non valida, '{'

Ma quando ho accedere al campo di oggetto del modello in django:

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

si genera l'errore seguente:

UnpicklingError: invalid load key, '{'. 

Please help me, ho provato google ma does'nt aiutami , c'è anche uno simile Question ma non è correlato al mio problema in quanto sto memorizzando in db.

+0

Vorrei suggerire il decollo dei dati per archiviarli nel database non è il modo corretto per farlo. È necessario memorizzare correttamente i dati nel database, trasformando i dati in tabelle e campi. –

+0

I dati sono in 'gerarchia complessa (dizionari nidificati)'. Non posso salvarlo in forma di tabelle e campi. I dati sono il risultato di qualche processo che in seguito ho bisogno di elaborare in django su un altro 'View'. –

+1

Quindi JSON è probabilmente un formato migliore di pickle. JSON è multipiattaforma, mentre pickle è specifico per l'implementazione. –

risposta

11

Ho riscontrato questo errore e ho scoperto che era perché avevo tentato di annullare il prelievo di qualcosa che non era stato originariamente messo in salamoia.

In particolare, avevo memorizzato un dt di Python senza decaparlo, portando al carattere iniziale {.

Pertanto, per risolvere il problema, si dovrebbe provare uno:

  • Non deserializzazione stringa quando recuperata dal datastore, o
  • Verifica che gli oggetti vengono decapate prima dell'inserimento nel datastore