GQL语法条件

Zey*_*nel 0 google-app-engine gql

我有一个简单的问题:

在GQL 语法摘要中

<condition> := <property> {< | <= | > | >= | = | != } <value>
Run Code Online (Sandbox Code Playgroud)

但在这里的一个例子

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

什么是:1

根据语法应该:=存在.

谢谢.

Sax*_*uce 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>
Run Code Online (Sandbox Code Playgroud)

:=在最后三行意味着<condition>在主表达式可以与表达的右侧来替代:=在任何三个的<condition>语句.

在示例中,他们选择来选择*,而不是__key__,则<kind>就是Pet,只有一个WHERE条件,并且不存在ORDER BY,LIMITOFFSET条款.

所以主表达式简化为:

SELECT * FROM Pet WHERE <condition>
Run Code Online (Sandbox Code Playgroud)

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

<condition> := <property> {< | <= | > | >= | = | != } <value>
Run Code Online (Sandbox Code Playgroud)

导致:

SELECT * FROM Pet WHERE <property> {< | <= | > | >= | = | != } <value>
Run Code Online (Sandbox Code Playgroud)

在示例中,<property>owner,运算符是=,并且<value>:1,即:

SELECT * FROM Pet WHERE owner = :1
Run Code Online (Sandbox Code Playgroud)

根据的文档GqlQuery,: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)
Run Code Online (Sandbox Code Playgroud)

获得查询对象后,可以调用fetch()它以将项目作为列表获取.或者,您也可以直接在查询上进行迭代.