GAE

GQL 参考

GQL 是一种类似于 SQL 的语言,用于从 App Engine 可扩展数据库检索数据实体。虽然 GQL 的功能与用于传统关系数据库的查询语言的功能不同,但 GQL 语法类似 SQL 的语法。

GQL 语法可以总结如下:

  SELECT * FROM <kind>
    [WHERE <condition> [AND <condition> ...]]
    [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
    [LIMIT [<offset>,]<count>]
    [OFFSET <offset>]

  <condition> := <property> {< | <= | > | >= | = | != } <value>
  <condition> := <property> IN <list>
  <condition> := ANCESTOR IS <entity or key>

与使用 SQL 一样,GQL 关键字不区分大小写。类型和属性名称区分大小写。

GQL 查询返回零个或更多请求的类型的数据实体,如同类型的 Model 类实例。结果始终是完整的实体,所以每个 GQL 查询始终以 SELECT * FROM 开头,后面带有类型的名称。(类似于 SQL 的字段指定符始终是 * 。保留了 SQL 语法便于用户熟悉。)GQL 查询无法执行类似 SQL 的 [join] 查询。

可选 WHERE 子句对结果集进行过滤以得出符合一个或多个条件的实体。每个条件都使用比较运算符将实体的属性与值进行比较。如果用 AND 关键字指定了多个条件,则实体必须符合所有条件才能由查询返回。GQL 没有 OR 运算符。但是,它具有 IN 运算符,该运算符可提供一种受限形式的 OR 。

IN 运算符将属性的值与列表中的每一项进行比较。IN 运算符等同于许多 = 查询(每个值一个)一起进行 OR 运算。查询可以返回指定属性的值等于列表中的任何值的实体。

注意: IN 和 != 运算符在后台使用多个查询。例如,IN 运算符对于列表中的每一项都执行单独的基层数据库查询。返回的实体是所有基层数据库查询的交叉产物的结果,并且消除了重复项。对于任一 GQL 查询,最多允许 30 个数据库查询。

条件还可以使用 ANCESTOR IS 操作符测试实体是否采用指定的实体作为祖先。值为祖先实体的 Model 实例或 Key。有关祖先的详细信息,请参阅键和实体组 。

属性名称始终位于比较的左侧。右侧可以是以下内容之一(对应于属性的数据类型):

  • str 常量,形式为单引号括起的字符串。字符串中的单引号字符必须转义为 '' 。例如:'Joe''s Diner'
  • 整数或浮点数常量。例如:42.7
  • 布尔常量,如 TRUE 或 FALSE 。
  • 绑定参数值。在查询字符串中,位置参数按数字引用:title = :1 关键字参数按名称引用:title = :mytitle

绑定参数可以绑定为传递到 GqlQuery 构造函数 或 Model 类的 gql() 方法 的位置参数或关键字参数。必须使用参数绑定来指定没有对应值常量语法的属性数据类型,包括列表数据类型。可以在 GqlQuery 实例的生命周期中使用 bind() 方法用新值重新绑定参数绑定(例如为了有效地重复使用查询)。

可选的 ORDER BY 子句指示应按照指定属性进行排序,以升序 (ASC ) 或降序 (DESC ) 返回结果。如果未指定方向,其默认为 ASC 。ORDER BY 子句可以用逗号分隔列表的形式指定多个排序顺序,从左到右进行评估。

可选的 LIMIT 子句使查询在前 count 个实体后停止返回结果。LIMIT 还可以包括 offset 以跳过许多结果以便找到要返回的第一个结果。如果不使用 LIMIT 子句,可选的 OFFSET 子句可以指定 offset 。

注意: LIMIT 子句最大为 1000。如果指定了大于最大值的限制,则将使用最大值。该最大值也适用于 GqlQuery 类的 fetch() 方法。

注意: 与 fetch() 方法的 offset 参数类似,GQL 查询字符串中的 OFFSET 不会减少从数据库抓取的实体数。它仅影响 fetch() 方法返回哪些结果。具有偏移的查询具有与偏移大小成线性关系的执行特性。

有关执行 GQL 查询、绑定参数和访问结果的信息,请参阅 GqlQuery 类和 Model.gql() 类方法。

Leave a Reply

Your email address will not be published. Required fields are marked *