2011-11-13 128 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字典而沒有酸洗它,導致第一個字符{

因此,爲了解決這個問題,你應該嘗試之一:

  • 未取儲存從數據存儲區檢索時的字符串,或者
  • 驗證的對象被之前酸洗在插入到數據存儲