如何构建GQL以排除集合中的值?

3 投票
1 回答
919 浏览
提问于 2025-04-16 04:39

有没有办法从谷歌应用引擎的数据库中选择那些键不在某个给定列表里的db.Model对象?如果可以的话,语法应该是什么样的呢?

下面是一个模型类的例子:

class Spam(db.Model):
    field1 = db.BooleanProperty(default=false)
    field2 = db.IntegerProperty()

这是我想要实现但又搞不懂的查询示例:

spam_results = db.GqlQuery(
"SELECT * FROM Spam WHERE key NOT IN :1 LIMIT 10", 
['ag1waWNreXByZXNlbnRzchMLEgxBbm5vdW5jZW1lbnQYjAEM', 
 'ag1waWNreXByZXNlbnRzchMLEgxBbm5vdW5jZW1lbnQYjgEM'])

for eggs in spam_results:
  print "id: %s" % a.key().id()

1 个回答

6

不支持。虽然应用引擎支持“IN”查询,但不支持“NOT IN”查询。

不过,如果你不想要的实体列表很小,那你可以直接把所有的实体都取出来,然后自己把不需要的过滤掉。

但是,如果你想排除的实体占所有实体的比例很大,那上面的方法就不太高效了。你可以考虑给你的模型添加一个额外的属性,这样就可以用这个属性来过滤掉你不想要的实体(是否可行要看你的具体需求和数据情况)。

撰写回答