Google App Engine:数据存储区查询出现问题

时间:2010-03-02 16:01:48

标签: python google-app-engine google-cloud-datastore

此查询有效:

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 个答案:

答案 0 :(得分:9)

您正试图从列表(或类似列表的对象)中获取一个空的项目。你正在做的事情与以下内容相当:

>>> 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或查询的第一个结果。

答案 1 :(得分:0)

似乎您的查询返回某种数组或列表,这是空的。尝试访问其不存在的第一个项目会引发异常。

在访问之前尝试计算返回结果的长度。