GQL语法条件

时间:2010-11-01 00:35:17

标签: google-app-engine gql

我有一个简单的问题:

在GQL中syntax summary

<condition> := <property> {< | <= | > | >= | = | != } <value>

但在example here

if users.get_current_user():
    user_pets = db.GqlQuery("SELECT * FROM Pet WHERE owner = :1",
                            users.get_current_user())

什么是:1

根据语法,那里应该有:=

感谢。

1 个答案:

答案 0 :(得分:5)

您发布的语法链接上的GQL语法是:

SELECT [* | __key__] 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>

最后三行中的:=表示主表达式中的<condition>可以替换为三个{{1}中任意一个:=右侧的表达式}陈述。

在示例中,他们选择<condition>而不是*__key__<kind>,只有一个Pet条件,并且没有WHEREORDER BYLIMIT条款。

因此主表达式简化为:

OFFSET

然后我们可以替换第一个条件表达式,即:

SELECT * FROM Pet WHERE <condition>

导致:

<condition> := <property> {< | <= | > | >= | = | != } <value>

在示例中,SELECT * FROM Pet WHERE <property> {< | <= | > | >= | = | != } <value> <property>,运算符为owner=<value>,即:

:1

根据the documentation for the GqlQuery class,:1表示该值将绑定到SELECT * FROM Pet WHERE owner = :1 的第一个参数(在查询之后)。因此,在示例中,值为GqlQuery()

<强>更新

我认为其中任何一个都不会起作用,因为它们都缺少双引号来结束查询字符串。但是,以下两个都应该有效:

users.get_current_user()

获得查询对象后,可以在其上调用query = db.GqlQuery( "SELECT * FROM Rep WHERE author = :1", users.get_current_user()) user = users.get_current_user() query = db.GqlQuery( "SELECT * FROM Rep WHERE author = :1", user) 以将项目作为列表获取。或者,您也可以直接在查询上进行迭代。