如何使用实体键在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)
- 如何在Google App Engine中包含第三方Python库?
- Eclipse启动挂起“Android SDK:解决错误标记”
- 如何在Google App Engine中导入模块?
- 一次从Eclipse运行两个Java程序?
- Google云terminal的自定义身份validation(而不是OAuth2)
- NameError:未定义全局名称“execfile”,尝试在Google App Engine启动器上运行应用程序
- 使用标准库可以在Go中嵌套模板吗? (Google App Engine)
- 删除Google App Engine应用程序
- Linux SDK升级后的“ImportError:No module named webapp2”(1.9.35 – > 1.9.38)