您发布的语法链接上的 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> 可以替换为三个<condition> 语句中的任何一个中:= 右侧的表达式。
在示例中,他们选择了* 而不是__key__,<kind> 是Pet,只有一个WHERE 条件,并且没有ORDER BY、LIMIT或OFFSET 子句。
所以主表达式简化为:
SELECT * FROM Pet WHERE <condition>
然后我们可以替换第一个条件表达式,即:
<condition> := <property> {< | <= | > | >= | = | != } <value>
导致:
SELECT * FROM Pet WHERE <property> {< | <= | > | >= | = | != } <value>
本例中<property>为owner,运算符为=,<value>为:1,即:
SELECT * FROM Pet WHERE owner = :1
根据the documentation for the GqlQuery class,: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)
一旦您有了查询对象,您就可以在其上调用fetch() 来获取列表中的项目。或者,您也可以直接遍历查询。