我想构建 GQL 查询以使用其数字 id 获取对象。我在应用程序管理控制台的数据存储查看器中执行此操作,因此无法使用 Model.get_by_id(numeric_id)。就像是
SELECT * FROM Model WHERE id = <numeric_id>
也不起作用。
我想构建 GQL 查询以使用其数字 id 获取对象。我在应用程序管理控制台的数据存储查看器中执行此操作,因此无法使用 Model.get_by_id(numeric_id)。就像是
SELECT * FROM Model WHERE id = <numeric_id>
也不起作用。
试试这个:
SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)
不幸的是,似乎没有办法编写相当于
SELECT * FROM Model WHERE id = <numeric_id>
这将选择具有给定 id 的所有模型实体。如果你对相当于
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。
另一种方法是,首先使用 id 获取实体的密钥
key = db.Key.from_path('Model', int(id))
然后通过
obj = db.get(key)
优点是,您不必进行任何字符串格式化。
参考:本课程第 3 题,https://classroom.udacity.com/courses/cs253/
我收到了这个错误:
GQL 查询错误:在第 1 行第 42 列遇到 ...。期待以下之一:UNQUOTED_NAME ... QUOTED_NAME ..."
事实证明,在 Google AppEngine 数据存储开发人员的管理控制台中,您应该删除引号并使用如下内容:
SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
就我而言,我必须将 ID 的类型从 String 更改为 Long