Условие синтаксиса GQL - PullRequest
       3

Условие синтаксиса GQL

0 голосов
/ 01 ноября 2010

У меня простой вопрос:

В GQL Синтаксическая сводка

<condition> := <property> {< | <= | > | >= | = | != } <value>

но в примере здесь

if users.get_current_user():
    user_pets = db.GqlQuery("SELECT * FROM Pet WHERE owner = :1",
                            users.get_current_user())

Что такое :1?

Согласно синтаксису там должно быть :=.

Спасибо.

1 Ответ

5 голосов
/ 01 ноября 2010

Грамматика 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(), чтобы получить элементы в виде списка.Или вы также можете выполнить итерацию непосредственно по запросу.

...