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?
根据语法应该:=存在.
谢谢.
您发布的语法链接上的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,LIMIT或OFFSET条款.
所以主表达式简化为:
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()它以将项目作为列表获取.或者,您也可以直接在查询上进行迭代.
| 归档时间: |
|
| 查看次数: |
1337 次 |
| 最近记录: |