The GQL grammar on the syntax link you posted is this:
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>
The :=
in the last three lines means that <condition>
in the main expression can be replaced with the expression to the right of the :=
in any of the three <condition>
statements.
In the example, they have chosen to select *
instead of __key__
, the <kind>
is Pet
, there is only one WHERE
condition, and there are no ORDER BY
, LIMIT
or OFFSET
clauses.
So the main expression simplifies to:
SELECT * FROM Pet WHERE <condition>
We can then substitute the first condition expression, ie:
<condition> := <property> {< | <= | > | >= | = | != } <value>
Resulting in:
SELECT * FROM Pet WHERE <property> {< | <= | > | >= | = | != } <value>
In the example, <property>
is owner
, the operator is =
, and the <value>
is :1
, ie:
SELECT * FROM Pet WHERE owner = :1
According to the documentation for the GqlQuery
class, the :1 means that the value will be bound to the first argument to GqlQuery()
(after the query). So in the example, the value is users.get_current_user()
.
Update:
I don't think either of those would work, because they are both missing a double quote to end the string of the query. However, both of the following should work:
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)
Once you have the query object you can call fetch()
on it to get the items as a list. Or, you can also iterate directly over the query.