Грамматика 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>
is :1
, то есть:
SELECT * FROM Pet WHERE owner = :1
Согласно документации для 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()
, чтобы получить элементы в виде списка.Или вы также можете выполнить итерацию непосредственно по запросу.