我想构建GQL查询以使用其数字ID获取对象。我在App管理控制台的Datastore查看器中这样做,所以我不能使用Model.get_by_id(numeric_id)。像
这样的东西SELECT * FROM Model WHERE id = <numeric_id>
也行不通。
答案 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)