如何使用实体密钥在GQL中查询

Thi*_*ilo 72 google-app-engine gql google-cloud-datastore

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

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

Decoded entity key: Programme: name=_1
Entity key: agtzcG9................... 
Run Code Online (Sandbox Code Playgroud)

此查询不起作用:

SELECT * FROM Programme where name = '_1'
Run Code Online (Sandbox Code Playgroud)

Ada*_*and 105

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

SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM Programme where __key__ = KEY(Programme, '_1')
Run Code Online (Sandbox Code Playgroud)

请注意,这不是您希望在AppEngine应用程序中执行的操作; 尼克在评论中指出,这是浪费大量时间.实际上,此示例仅向您展示如何在管理控制台中按键进行查询.

  • 唉,不.这是浪费时间和资源的浪费. (4认同)
  • @Nick:但在管理控制台中,可能没有更好的方法. (4认同)
  • 可以通过Id而不是Key进行查询吗? (4认同)

小智 20

对于数字ID,类似于逐个查询的表单起作用:

SELECT * from Programme where __key__ = KEY('Programme', 1234567)
Run Code Online (Sandbox Code Playgroud)

我发现此表单在管理控制台中特别有用.


Nic*_*son 18

您根本不需要查询按键获取实体 - 您只需通过其键获取实体即可.在Python中,您可以使用MyModel.get_by_key_name('_1').这比Adam建议使用查询快3到5倍.

  • 这不是我的建议,尼克,我只是想帮他让他的查询工作.我认为他正试图在管理控制台数据查看器中查看内容. (5认同)
  • @Ajax 越线。ryan 正在谈论“SELECT * FROM Kind WHERE __key__ = :1”形式的查询;您正在谈论“SELECT __key__ FROM Kind ...”形式的查询。你们对各自类型的查询都是正确的。 (2认同)