AppEngine NDB查询过滤器

时间:2013-08-17 00:17:35

标签: google-app-engine app-engine-ndb

以下两种带过滤器的查询方法有什么区别?

@classmethod
def get_by_user_id(cls, ancestor_key, user_id):
    return cls.query(cls.user_id==user_id, ancestor=ancestor_key).get()

@classmethod
def get_by_user_id(cls, ancestor_key, user_id):
    return cls.query(user_id=user_id, ancestor=ancestor_key).get()

似乎给出相同的结果,这些结果是按user_id的值过滤的条目。感谢。

1 个答案:

答案 0 :(得分:4)

你会发现这个简单的情况没有区别。第二个是第一个样式的快捷方式,使用关键字args查找属性名称。

但是你不能在你想要的时间内使用第二种风格的不等式过滤器< ,使用IN()运算符或排序顺序。

使用表达式时,会创建一个FilterNode或PropertyOrder实例。例如

dev~cash-drawer> models.InvoiceItem.price == 100
FilterNode('price', '=', 10000)

dev~cash-drawer> models.InvoiceItem.price.IN([100,])
FilterNode('price', '=', 10000)

dev~cash-drawer> -models.InvoiceItem.price
PropertyOrder(<price>, DESCENDING)

您只能使用关键字参数来表达所有内容。