如何在Google App Engine数据查看器中使用GQL针对实体密钥编写查询?
在查看器中,第一列(ID /名称)显示为name=_1
,在详细视图中,它将键显示为
Decoded entity key: Programme: name=_1
Entity key: agtzcG9...................
此查询不起作用:
SELECT * FROM Programme where name = '_1'
答案 0 :(得分:105)
您可以使用实体的密钥来检索它:
SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')
并且,您应该能够使用类似的名称进行查询:
SELECT * FROM Programme where __key__ = KEY(Programme, '_1')
请注意,这不是您希望在AppEngine应用程序中执行的操作;尼克在评论中指出,这是浪费大量时间。实际上,此示例仅向您展示如何在管理控制台中按键进行查询。
答案 1 :(得分:20)
对于数字ID,类似于逐个查询的表单起作用:
SELECT * from Programme where __key__ = KEY('Programme', 1234567)
我发现此表单在管理控制台中特别有用。
答案 2 :(得分:18)
您根本不需要查询按键获取实体 - 您只需通过其键获取实体即可。在Python中,您可以使用MyModel.get_by_key_name('_1')
执行此操作。这比Adam建议使用查询快3到5倍。
答案 3 :(得分:2)
按键查询时,您需要准确匹配密钥,包括父密钥,而不仅仅是ID或名称。当然,如果父级为null,如上例所示,则ID或名称以及实体类型就足够了。
如果你有已编码的实体密钥,你可以使用它:
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')
如果父母本身有父母,您也需要添加父母。有关详细信息,请参阅official GQL documentation。
似乎没有办法选择具有相同ID或名称的所有内容,无论父级如何。
答案 4 :(得分:1)
快速注意一下:当我在KEY中的任何args周围使用任何引号时,调用失败(在管理控制台中我得到错误弹出窗口)。
例如,对于带有ID / Name 12345的“mytype”类型,这样做 NOT 工作:
SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')
但这样做:
SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)