如何在 Google App Engine 数据查看器中使用 GQL 针对实体键编写查询?
在查看器中,第一列 (Id/Name) 显示为name=_1
,在详细视图中,它将键显示为
Decoded entity key: Programme: name=_1
Entity key: agtzcG9...................
此查询不起作用:
SELECT * FROM Programme where name = '_1'
如何在 Google App Engine 数据查看器中使用 GQL 针对实体键编写查询?
在查看器中,第一列 (Id/Name) 显示为name=_1
,在详细视图中,它将键显示为
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 应用程序中执行的操作;正如尼克在他的评论中指出的那样,这是对时间的巨大浪费。真的,这个例子只是向您展示如何在管理控制台中按键查询。
对于数字 ID,类似于按名称查询的形式起作用:
SELECT * from Programme where __key__ = KEY('Programme', 1234567)
我发现此表单在管理控制台中特别有用。
您根本不需要查询来通过键获取实体 - 您可以简单地通过键获取实体。在 Python 中,您可以使用MyModel.get_by_key_name('_1')
. 这比 Adam 建议的使用查询快 3 到 5 倍。
按键查询时,需要准确匹配键,包括父级,而不仅仅是ID或名称。当然,如果 parent 为 null,如上例,ID 或 Name 以及实体的类型就足够了。
如果你有已经编码的实体键,你可以像这样使用它:
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 文档。
无论父母是谁,似乎都没有办法选择具有相同 ID 或名称的所有内容。
关于这一点的快速说明:当我在 KEY 中的任何 args 周围使用任何引号时,调用失败(在管理控制台中我收到错误弹出窗口)。
例如,对于 ID/名称为 12345 的类型“mytype”,这不起作用:
SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')
但这确实:
SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)