为什么祖先只有一个等号(Google Datastore)

时间:2013-07-26 08:40:35

标签: google-app-engine google-cloud-datastore

  

UserModel.query( self.login == login, self.name == name, ancestor = ancestor_key)

这是一个 Python 语句,用于从 GAE数据存储区中检索数据。你能解释为什么我为祖先使用一个等号(=),为其他属性使用两个符号(==)?

当我使用两个等号时,像self.login == login这样的语句应该返回一个布尔值,然后传递给函数。但它不会这样,对吗?

2 个答案:

答案 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