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