我必须在这里遗漏一些东西,但这是一个我似乎无法理解的问题。
在数据存储区中,有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)
看起来查询条件的顺序很重要。但为什么&怎么样?你能帮忙吗?
答案 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中的查询完全相同。