2013-08-17 178 views
2

以下两种带过滤器的查询方法有什么区别?AppEngine 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的值过滤条目。谢谢。

回答

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) 

哪些是你无法用关键字参数表达的所有东西。