【问题标题】:UnpicklingError invalid load key, '{'UnpicklingError 无效的加载键,'{'
【发布时间】:2011-12-28 00:08:26
【问题描述】:

我正在开发Django 中的应用程序。我正在尝试将一些数据结构e.g. dictionary 存储在MySQL db 中。所以我使用 Python Pickle 模块。当我使用pickle.dumps(some_structure) 将其存储在数据库中时,它工作正常。我的数据库字段是longblob 模式是binary。

但是当我在 django 中访问模型对象的字段时:

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

它会引发以下错误:

UnpicklingError: invalid load key, '{'.

请帮助我,我已经尝试过 google,但它并没有帮助我,还有一个类似的 Question 但它与我的问题无关,因为我存储在 db 中。

【问题讨论】:

  • 我建议腌制您的数据以将其存储在数据库中并不是解决此问题的正确方法。您应该将数据正确存储在数据库中,将数据转换为表格和字段。
  • 数据在complex hierarchy (nested dictionaries)。我不能以表格和字段的形式保存它。数据是一些过程的结果,我稍后需要在 django 中处理另一个 View。
  • 那么 JSON 可能是比 pickle 更好的格式。 JSON 是跨平台的,而 pickle 是特定于实现的。
  • 无论如何都无法过滤腌制数据。
  • 你使用什么模型字段类型?

标签: python mysql pickle


【解决方案1】:

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

更具体地说,我存储了一个 Python dict 而没有对其进行腌制,导致初始字符 {。

因此,要解决问题,您应该尝试以下任一方法:

  • 在从数据存储中检索时不解开字符串,或者
  • 在插入数据存储之前验证对象是否已被腌制

【讨论】:

  • 发生这种情况的另一种方式:尝试在未进行正确的 LFS 克隆的情况下解压缩 Git LFS 文件。
【解决方案2】:

损坏的文件可能会导致此问题。用新的替换旧的泡菜对象。它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多