UserModel.query( self.login == login, self.name == name, ancestor = ancestor_key)
这是一个 Python 语句,用于从 GAE数据存储区中检索数据。你能解释为什么我为祖先使用一个等号(=),为其他属性使用两个符号(==)?
当我使用两个等号时,像self.login == login
这样的语句应该返回一个布尔值,然后传递给函数。但它不会这样,对吗?
答案 0 :(得分:1)
您正在与作业进行比较。
查看文档https://developers.google.com/appengine/docs/python/ndb/queries#filter_by_prop
为此类创建查询对象的工厂采用祖先参数,该参数定义给定祖先的查询范围。它还接受许多定义过滤器的表达式。 self.login == login
的使用是定义过滤器的表达式。
我不明白你问题的最后部分。
定义查询的另一种方法是
UserModel.query(ancestor=ancestor_key).filter(self.login==login)
在query()中提供过滤器的能力只是这种形式的捷径。
答案 1 :(得分:1)
对于问题的第二部分:
python允许你为一个类重载'equals'(并且小于和大于等等)(并且你可以让它返回任何东西,而不仅仅是true / false),并且ndb只为属性做了返回查询FilterNodes。检查来源:https://code.google.com/p/appengine-ndb-experiment/source/browse/ndb/model.py#858