2012-08-09 55 views
1

我想编写一个ndb查询,它从结果集中排除由其ID标识的特定实体。GAE ndb查询排除实体

我曾尝试以下:

result = Entity.query(Entity.key.id() != 'entity-id', *some other condition*).fetch() 

的Entity.key.id()= '实体-ID' 位抛出一个错误。什么是正确的语法?

回答

2

我不知道是否有可能查询排除关键,你有一个简单的解决方法,从最终结果中删除结果。

但是,如果它的工作的语法应该是这样的:

result = Entity.query(Entity.key != ndb.Key(Entity, id), *some other condition*).fetch() 
+0

这对我没有用。我相信你必须使用from_path()Key方法从种类和ID构建Key对象。另外,要引用实体的密钥,您需要使用'__key__'语法,请参阅我的答案。 – HorseloverFat 2012-12-03 17:46:18

+0

@HorseloverFat from_path()和Key()基本相同。 – 2012-12-03 18:40:47

+0

我不觉得它们在db API中是一样的。如果我用'.Key'替换'.Key.from_path'中的错误。 – HorseloverFat 2012-12-03 18:59:38

0

有可能基于使用DB API的ID,以排除特定实体(和我相信有一些小的改动的NDB API )。以下语法适用于使用db API的我。它建立一个查询,其结果排除了id_to_retrieve变量中的ID:

id_to_retrieve = 123456 
query = Entity.all() 
query.filter('__key__ !=', db.Key.from_path('Entity', id_to_retrieve)) 
query.fetch(None) 
+0

您正在使用db API而不是ndb API。 – 2012-12-03 18:41:08

+0

好点。我没有注意到这是一个ndb问题。我会更新答案。 – HorseloverFat 2012-12-03 18:53:17