Google App Engine: проблема с запросом хранилища данных - PullRequest
3 голосов
/ 02 марта 2010

Этот запрос работает:

item = db.GqlQuery("SELECT * FROM Item WHERE CSIN = 13")[0]

хотя, если нет никаких результатов, это взрывается мне в лицо. (Как я могу обойти это? * Цикл for кажется сомнительным, когда я хочу на одной итерации максимум.)

Этот запрос не работает:

item = db.GqlQuery("SELECT * FROM Item WHERE CSIN = :1", CSIN)[0]

CSIN - строка, представляющая число. Я получаю эту ошибку:

Traceback (most recent call last):
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 507, in __call__
    handler.get(*groups)
  File "path\to\src\Main.py", line 42, in get
    item = db.GqlQuery("SELECT * FROM Item WHERE CSIN = :1", CSIN)[0]
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\db\__init__.py", line 1717, in __getitem__
    raise IndexError('The query returned fewer than %d results' % (arg+1))
IndexError: The query returned fewer than 1 results

Что я здесь не так делаю?

Ответы [ 2 ]

9 голосов
/ 02 марта 2010

Вы пытаетесь получить элемент из списка (или подобного списку объекта), который является пустым. То, что вы делаете, похоже на следующее:

>>> results = [] # an empty list
>>> item = results[0] # Raises an IndexError, because there is nothing in the list

Вместо этого вам нужно:

item = db.GqlQuery("SELECT * FROM Item WHERE CSIN = :1", CSIN).get()

Тогда item будет либо None, либо первым результатом запроса.

0 голосов
/ 02 марта 2010

Кажется, что ваш запрос возвращает массив или список какого-то рода, который является пустым. При попытке доступа к несуществующему первому элементу возникает исключение.

Попробуйте выяснить длину возвращаемого результата, прежде чем получить к нему доступ.

...