2013-08-17 130 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) 

哪些是你無法用關鍵字參數表達的所有東西。