Грамматика 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()
.
Update:
Я не думаю, что любой из тех, кто будет работать, потому что они оба отсутствуют двойные кавычки, чтобы закончить строку запроса. Тем не менее, оба из следующих должно работать:
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()
на нем, чтобы получить элементы в виде списка. Или вы также можете выполнять итерацию непосредственно по запросу.
Спасибо за подробный ответ. Другой быстрый вопрос: этот запрос работает: 'query = list (db.GqlQuery (" SELECT * FROM Rep WHERE author = users.get_current_user())) 'Но если я определяю' user = users.get_current_user() 'и попробую запрос 'query = list (db.GqlQuery ("SELECT * FROM Rep WHERE author = user))' тогда это не сработает. Я получаю ошибку 'SyntaxError: EOL во время сканирования строкового литерала' Любое предложение? Еще раз спасибо! – Zeynel
Я обновил свой ответ. –
Отлично! Спасибо. – Zeynel