2

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

@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

1 回答 1

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)

仅用关键字参数无法表达的所有内容。

于 2013-08-17T00:48:53.663 回答