在MySQL db中保存Python Pickled对象

Aam*_*nan 9 python mysql django pickle

我在Django中腌制Python对象并将其保存在MySQL数据库中.到目前为止,我遵循了这些简单的规则:

  1. cPickle.dumps(object) #将python对象转换为pickle对象

  2. cPickle.loads(pickled_object) #从pickle对象加载python对象

  3. 我的Django Model FieldText Field

  4. MySQL数据库字段类型是longblob属性binary

  5. MySQL db编码是 utf8_unicode_ci

不幸的是我在加载python对象时遇到以下错误.

Type Error: ('an integer is required', <type 'datetime.date'>, ('x07xb6x0bx06',))
Run Code Online (Sandbox Code Playgroud)

在我看来,通过查看错误值,x07xb6x0bx06这是一个编码问题.我错过了一些重要的步骤吗?任何人都可以帮我解决这个问题吗?

wbe*_*rry 6

如果您尝试将输出存储cPickle.dumpsVARCHAR列中,那么您的问题是您正在尝试将字节字符串存储在字符列中.在这种情况下,修复是将对象编码为unicode(base64.encode(cPickle.dumps(myobject)))然后存储它.

或者:

object2varchar = lambda obj: unicode(base64.encode(cPickle.dumps(obj)))
store(object2varchar([1, 'foo']))
Run Code Online (Sandbox Code Playgroud)