如何使用实体键在GQL中进行查询?

如何在Google App Engine数据查看器中使用GQL编写针对实体键的查询?

在查看器中,第一列(Id / Name)显示为name=_1 ,在详细视图中显示关键字as

 Decoded entity key: Programme: name=_1 Entity key: agtzcG9................... 

此查询不起作用:

 SELECT * FROM Programme where name = '_1' 

您可以使用实体的密钥来检索它:

 SELECT * FROM Programme where __key__ = KEY('agtzcG9...................') 

而且,您应该能够使用类似的名称进行查询:

 SELECT * FROM Programme where __key__ = KEY(Programme, '_1') 

请注意,这不是您想在AppEngine应用程序中执行的操作; 正如尼克在评论中所指出的,这是对时间的巨大浪费。 真的,这个例子只是向你展示了如何在pipe理控制台中通过Key进行查询。

对于数字标识,类似于按名称查询的forms工作:

 SELECT * from Programme where __key__ = KEY('Programme', 1234567) 

我发现这个表单在pipe理控制台中特别有用。

你不需要通过键查询来获得一个实体 – 你可以简单地通过键来获取实体。 在Python中,您可以使用MyModel.get_by_key_name('_1')来完成此操作。 这比Adam使用查询的build议快3到5倍。

当按键查询时,您需要精确匹配键,包括父母,而不仅仅是ID或名称。 当然,如果父项为空,就像上面的例子一样,ID或名称和实体的types就足够了。

如果你有已经编码的实体键,你可以像这样使用:

 SELECT * FROM Programme where __key__ = KEY('agtzcG9...................') 

对于上面的简单例子,

 SELECT * FROM Programme where __key__ = KEY('Programme', '_1') 

会做,但如果你的钥匙有一个父母,就像

 Paren: id=123 

然后查询将是

 SELECT * FROM Programme where __key__ = KEY('Paren', 123, 'Programme', '_1') 

如果父母本身有父母,则还需要添加父母。 有关更多信息,请参阅官方的GQL文档 。

似乎没有办法select具有相同ID或名称的所有内容,而不考虑父项。

只是一个简短的说明:当我在KEY的任何参数周围使用任何引号时,调用失败(在pipe理控制台中出现错误popup窗口)。

例如,对于ID /名称为12345的“mytype”types,这不起作用:

 SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345') 

但是这样做:

 SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)