【问题标题】:Python Pickle Loads ErrorPython Pickle 加载错误
【发布时间】:2013-11-25 04:40:38
【问题描述】:

我已经使用 pickle.dumps 腌制了一个字典列表。我将字符串保存在 MySQL 数据库的文本字段中 - 由 Django 管理。当我提取字符串并尝试将字符串解压缩到字典列表时,我收到以下错误:

>>> pickle.loads(intlist1)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/pickle.py", line 1381, in loads
   file = StringIO(str)
TypeError: expected read buffer, ValuesQuerySet found
>>> 

编辑: 想出了解决办法。虽然无法理解解决方案。

pickle.loads(intlist1) #did not work
pickle.loads(intlist1[0].values()[0]) #works

我不知道为什么会这样!

【问题讨论】:

  • 错误信息明确指出intlist1 的类型为ValuesQuerySet。那不是字符串。将其转换为字符串。
  • 但是我从数据库的表中的列中获取 intlist1,其中元素存储为“文本”,我使用 pickle.dumps 保存了元素。
  • 不过,您正在ValuesQuerySet 类型的对象传递给loads,这就是您收到错误的原因。你的问题是真的关于如何正确使用你的数据库。但是您还没有说您正在使用哪个数据库,也没有显示任何存储或检索代码的数据库。在你做之前没有人可以帮助你。
  • 顺便问一下,使用的是 Django 吗?如果是,请说出来。
  • 是的,我是。很抱歉,如果这造成了混乱

标签: python django serialization pickle


【解决方案1】:

这是一个愚蠢的错误。对不起。

我从数据库中获取 intlist1 为

.values('interests') 并忘记 [0]['interests'][0] 以获取之后的值。愚蠢的错误。对不起。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多