Python Pickled Objekte in MySQL db speichern

8

Ich picke Python-Objekte in Django und speichere sie in MySQL db. Bisher habe ich diese einfachen Regeln befolgt:

  1. cPickle.dumps(object) #um Python-Objekt in ein gepicktes Objekt zu konvertieren

  2. cPickle.loads(pickled_object) # lädt das Python-Objekt aus dem markierten Objekt zurück

  3. Mein Django Model Field ist Text Field

  4. MySQL-Datenbankfeld Typ ist longblob Attribute binary

  5. Die MySQL-Datenbankcodierung ist utf8_unicode_ci

Leider bekomme ich beim Laden des Python-Objekts folgenden Fehler.

%Vor%

Wenn ich nach dem Fehlerwert x07xb6x0bx06 suche, scheint das ein Codierungsproblem zu sein. Habe ich einen wichtigen Schritt verpasst ?? Kann mir jemand helfen, dieses Problem zu lösen?

    
Aamir Adnan 16.11.2011, 10:24
quelle

3 Antworten

5

Wenn Sie versuchen, die Ausgabe von cPickle.dumps in einer VARCHAR -Spalte zu speichern, liegt das Problem vor, dass Sie versuchen, eine Byte-Zeichenfolge in einer Zeichenspalte zu speichern. Der Fix in diesem Fall besteht darin, Ihr Objekt als unicode(base64.encode(cPickle.dumps(myobject))) zu codieren und es dann zu speichern.

Alternativ:

%Vor%     
wberry 16.11.2011, 16:12
quelle
1

eine weitere Regel: Verbinden Sie sich mit mysql mit der Option charset=utf8 ?

UPD1: Manchmal ist es eine gute Idee, die vollständige SQL-Abfrage zu betrachten. Normalerweise mache ich das so:

%Vor%     
newtover 16.11.2011 10:30
quelle
0

Newtovers Antwort ist wahrscheinlich die richtige, aber werfen Sie einen Blick auf

Ссылка

Es hat mir wirklich Zeit gespart und kann so ziemlich alles speichern, was du willst.

    
Narsilou 16.11.2011 10:40
quelle

Tags und Links