Google App Engine:Datastore查询问题

3 投票
2 回答
899 浏览
提问于 2025-04-15 19:55

这个查询可以正常工作:

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,要么就是查询的第一个结果。

撰写回答