数据存储区查看器中具有数字ID的GQL查询

时间:2010-10-06 06:07:04

标签: google-app-engine gql

我想构建GQL查询以使用其数字ID获取对象。我在App管理控制台的Datastore查看器中这样做,所以我不能使用Model.get_by_id(numeric_id)。像

这样的东西
SELECT * FROM Model WHERE id = <numeric_id>

也行不通。

5 个答案:

答案 0 :(得分:76)

试试这个:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)

答案 1 :(得分:5)

不幸的是,似乎没有办法编写等同于

的查询
SELECT * FROM Model WHERE id = <numeric_id>

将选择具有给定id的所有Model实体。如果您对某事等同于

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL

你可以使用像

这样的东西
SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)

如果您的实体确实有父母,那么您需要将其指定为密钥的一部分,例如

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>)

如果父母本身有父母,您也需要另外指定。 (祖父母离开父母,依此类推。)

当然,如果您不限于GQL(就像您使用的是Python,Go或Java),您可以查询密钥,解码密码并按ID过滤,然后获取相应的实体。但当然,由于您只能使用GQL,因此无法在数据存储区查看器中运行。

答案 2 :(得分:3)

另一种方法是,首先使用id by

获取实体的密钥
"(A,B,C)"

然后通过

获取对象
"((A,B,C),(A,B,C),(A,B,C),(A,B,C))"

优点是,您不必进行任何字符串格式化。

参考:本课程的问题集3 https://classroom.udacity.com/courses/cs253/

答案 3 :(得分:0)

在我的情况下,我必须将ID的类型从String更改为Long

答案 4 :(得分:0)

我遇到此错误:

  

GQL查询错误:在第1行第42列遇到...。   其中之一:UNQUOTED_NAME ... QUOTED_NAME ...”

事实证明,在Google AppEngine数据存储区开发人员的管理控制台中,您应该删除引号并使用如下所示的内容:

SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)