Python 酸洗Django QuerySet
在我的例子中,pickle查询结果不同于unpickle查询结果。我已经在这里读到: 这类操作实际上是允许的。那么,我做错了什么 upd#1:尝试了cPickle和普通Pickle-都得到了“False”Python 酸洗Django QuerySet,python,django,caching,orm,pickle,Python,Django,Caching,Orm,Pickle,在我的例子中,pickle查询结果不同于unpickle查询结果。我已经在这里读到: 这类操作实际上是允许的。那么,我做错了什么 upd#1:尝试了cPickle和普通Pickle-都得到了“False” upd#2:可能的解决方案-使用list()将QuerySet转换为Python列表。在阅读以下内容时找到它:问题是您正在尝试比较两个查询集,而查询集没有定义\uuu\cmp\uu方法 因此,您可以将queryset与自身进行比较,您将得到以下结果: from myapp.models imp
upd#2:可能的解决方案-使用
list()
将QuerySet转换为Python列表。在阅读以下内容时找到它:问题是您正在尝试比较两个查询集,而查询集没有定义\uuu\cmp\uu
方法
因此,您可以将queryset与自身进行比较,您将得到以下结果:
from myapp.models import MyModel
from cPickle import *
tmp = MyModel.objects.all()[:1]
print(loads(dumps(t, -1)) == t)
#Output is "False"
这是因为,由于没有\uu\cmp\uu
方法,=
计算True
是否两个对象具有相同的标识(相同的内存地址)。你可以从报纸上读到
因此,当您这样做时:
>> tmp == tmp
True
由于对象具有不同的内存地址,因此会得到一个False
。如果将查询转换为“可比较”对象,则可以获得所需的行为。试试这个:
>> loads(dumps(tmp, -1)) == tmp
False
希望有帮助
>> set(loads(dumps(tmp, -1))) == set(tmp)
True