我有一个简单的问题:
在GQL中syntax summary
<condition> := <property> {< | <= | > | >= | = | != } <value>
if users.get_current_user():
user_pets = db.GqlQuery("SELECT * FROM Pet WHERE owner = :1",
users.get_current_user())
什么是: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
条件,并且没有WHERE
,ORDER BY
或LIMIT
条款。
因此主表达式简化为:
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)
以将项目作为列表获取。或者,您也可以直接在查询上进行迭代。