2011-11-13 83 views
5

我正在处理Django中的应用程序。我正试图在MySQL db中存储一些数据结构e.g. dictionary。所以我使用Python Pickle模块。当我使用pickle.dumps(some_structure)将其存储在db中时它工作正常。我的数据库字段是longblob模式是binaryUnpicklingError无效加载密钥,'{'

但是,当我访问模型对象的字段在Django:

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

它提出了以下错误:

UnpicklingError: invalid load key, '{'. 

请帮助我,我曾尝试谷歌,但它一点儿也不帮我,也有一个类似的Question,但它与我的问题没有关系,因为我在db中存储。

+0

我会建议酸洗你的数据将其存储在数据库中是不正确的方式去做这件事。您应该将数据正确存储在数据库中,将数据转换为表和字段。 –

+0

数据在'复杂层次结构(嵌套字典)'中。我无法以表格和字段的形式保存它。数据是一些过程的结果,我稍后需要在另一个'View'中处理django。 –

+1

然后JSON可能比咸菜更好的格式。 JSON是跨平台的,而pickle是特定于实现的。 –

回答

11

我遇到了这个错误,我发现这是因为我试图解开一些原本没有被腌制过的东西。

更具体地说,我已经存储了一个Python字典而没有酸洗它,导致第一个字符{

因此,为了解决这个问题,你应该尝试之一:

  • 未取储存从数据存储区检索时的字符串,或者
  • 验证的对象被之前酸洗在插入到数据存储