Google App Engine 数据存储区:filter()
Google App Engine datastore: filter()
我正在尝试使用 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
时?
App Engine 开发服务器的日志说明了什么?您的请求看起来像旧式数据存储请求,而不是 ndb 请求,因此您的语法可能有误,并且代码在发送任何响应之前抛出异常。
Called to implement truth value testing and the built-in operation bool()
; should return False or True, or their integer equivalents 0 or 1. When this method is not defined, __len__()
is called, if it is defined, and the object is considered true if its result is nonzero. If a class defines neither __len__()
nor __nonzero__()
, all its instances are considered true.
似乎 gae Query
没有实现 __nonzero__
或 __len__
所以更好的检查方法是:
if result.count(limit=1): # retrieves only 1 record
# results exist
else:
# results don't exist
查询对象将始终按照之前的答案解析为真。
在您计算、迭代、获取或获取其结果集之前,不会执行查询。
我会做一些更像
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.")
我正在尝试使用 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
时?
App Engine 开发服务器的日志说明了什么?您的请求看起来像旧式数据存储请求,而不是 ndb 请求,因此您的语法可能有误,并且代码在发送任何响应之前抛出异常。
Called to implement truth value testing and the built-in operation
bool()
; should return False or True, or their integer equivalents 0 or 1. When this method is not defined,__len__()
is called, if it is defined, and the object is considered true if its result is nonzero. If a class defines neither__len__()
nor__nonzero__()
, all its instances are considered true.
似乎 gae Query
没有实现 __nonzero__
或 __len__
所以更好的检查方法是:
if result.count(limit=1): # retrieves only 1 record
# results exist
else:
# results don't exist
查询对象将始终按照之前的答案解析为真。
在您计算、迭代、获取或获取其结果集之前,不会执行查询。
我会做一些更像
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.")