Appengine DataStore查询条件的顺序是否重要?

时间:2014-05-17 15:15:39

标签: python google-app-engine google-cloud-datastore

我必须在这里遗漏一些东西,但这是一个我似乎无法理解的问题。

在数据存储区中,有1条记录     proj_id = u' 1',type =' normal'

这(正确)返回None。

delete_keys = self.query(self.proj_id == u'2').fetch(keys_only=True)

这(正确)返回数据存储区中的一条记录。

delete_keys = self.query(self.type == 'normal').fetch(keys_only=True)

这(正确)返回None。

delete_keys = self.query(self.type == 'normal' and self.proj_id == u'2').fetch(keys_only=True)

然而,奇怪的是,这会返回数据存储区中的一条记录,而不是“无”。

delete_keys = self.query(self.proj_id == u'2' and self.type == 'normal').fetch(keys_only=True)

看起来查询条件的顺序很重要。但为什么&怎么样?你能帮忙吗?

1 个答案:

答案 0 :(得分:2)

您无法将条件与'和'结合起来。像这样,你应该将它们作为单独的参数传递给query

delete_keys = self.query(self.type == 'normal', self.proj_id == u'2').fetch(keys_only=True)

您所看到的行为是由于'以及'适用于python:

如果x and y为假,则x的结果为x,否则为y

等于运算符返回的FilterNode(self.type == 'normal'的结果)不是假的,因此self.type == 'normal' and self.proj_id == u'2'的结果只是self.proj_id == u'2' - 查询才被传递一个条件,因此在第3和第4个代码块中执行的查询与1和2中的查询完全相同。