【问题标题】:GQL query with numeric id in datastore viewer数据存储查看器中带有数字 id 的 GQL 查询
【发布时间】:2011-04-21 15:44:44
【问题描述】:

我想构建 GQL 查询以使用其数字 id 获取对象。我在应用程序管理控制台的数据存储查看器中执行此操作,所以我不能使用 Model.get_by_id(numeric_id)。类似的东西

SELECT * FROM Model WHERE id = <numeric_id>

也不行。

【问题讨论】:

    标签: google-app-engine gql


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • GQL!怎能不爱。 /讽刺
    • 对密钥进行完全匹配,而不仅仅是密钥的 ID 部分。我想获取具有给定数字 id 的所有实体,而不仅仅是没有父级的实体。
    • 当我在 dataviewer 中运行它时,它正在工作,但在代码中我得到:',' 预期在 "key = KEY('DataviewUserData' , 6227633859723264) 中的字符 34 "
    【解决方案2】:

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

    的查询
    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 过滤,然后获取相应的实体。当然,这在 Datastore Viewer 中不起作用,因为您只能使用 GQL。

    【讨论】:

      【解决方案3】:

      另一种方法是,首先使用 id by 获取实体的密钥

      key = db.Key.from_path('Model', int(id))
      

      然后通过

      获取对象
      obj = db.get(key)
      

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

      参考:本课程第三题,https://classroom.udacity.com/courses/cs253/

      【讨论】:

      • 您应该删除“。”在from_path 之后,这是一个语法错误。否则它可以工作
      【解决方案4】:

      我收到了这个错误:

      GQL 查询错误:在第 1 行第 42 列遇到 ...。期待 之一:UNQUOTED_NAME ... QUOTED_NAME ..."

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

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

      【讨论】:

        【解决方案5】:

        就我而言,我必须将 ID 的类型从 String 更改为 Long

        【讨论】:

          猜你喜欢
          • 2015-12-22
          • 1970-01-01
          • 2016-01-23
          • 1970-01-01
          • 2014-11-26
          • 2018-12-08
          • 2019-04-09
          • 2019-09-28
          • 2016-09-25
          相关资源
          最近更新 更多