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

Которые вы не можете выразить с помощью только аргументов ключевого слова.