我尝试使用filter()
方法从Google App Engine的数据存储中检索条目,如下所示:
result = Sender.all().filter("email =", email).filter("source_address =", source).filter("dest_address =", dest).filter("food_type =", food_type)
然后,如果存在这样的条目,我将更改该条目中其中一列的值。否则,我显示错误消息。
if result:
for e in result:
e.time_of_delivery = toj
e.put()
self.response.write("Time of delivery successfully rescheduled !")
else:
self.response.write("No such request.")
但是,即使根据我使用的filter()
方法施加的条件,数据存储区中的条目不存在,也永远不会显示No such request.
消息。相反,我得到的只是一个空白页面。
我的代码究竟出了什么问题?为什么在数据存储区中找不到条目时,我的代码的else
部分从未执行过,即何时result = None
?
答案 0 :(得分:2)
根据之前的答案,查询对象将始终解析为true ..
在计算,迭代,获取或获取结果集之前,不会执行查询。
我会做更像
的事情 has_result = False
for e in results:
e.time_of_delivery = toj
e.put()
self.response.write("Time of delivery successfully rescheduled !")
has_result = True
if not has_result:
self.response.write("No such request.")
答案 1 :(得分:1)
被要求实施真值测试和内置操作
bool()
;应该返回False或True,或者它们的整数等价于0或1.如果未定义此方法,则调用__len__()
(如果已定义),并且如果对象的结果非零,则认为该对象为true。如果某个类既未定义__len__()
也未定义__nonzero__()
,则其所有实例都被视为true。
似乎gae Query
没有实现__nonzero__
或__len__
,因此更好的检查方法是:
if result.count(limit=1): # retrieves only 1 record
# results exist
else:
# results don't exist
答案 2 :(得分:-1)
App Engine Development服务器的日志说什么?您的请求看起来像是旧式数据存储区请求,而不是ndb,因此您可能使用了错误的语法,并且代码在发送任何响应之前都会抛出异常。