2013-03-12 5 views
0

В Google App Engine я хотел бы знать, можно ли создать условия в запросе ndb следующим образом. Предположим, у меня есть следующий код:Google app engine: ndb query done cleaner

if bidded == '': 
    productRanks = Product.query(Product.bidTime>=startDate, 
           Product.bidTime<endDate).fetch()   
elif bidded == 'yes': 
    productRanks = Product.query(Product.bidTime>=startDate 
           Product.bidTime<endDate, 
           Product.bidded=='yes').fetch() 
else: 
    productRanks = Product.query(Product.bidTime>=startDate 
           Product.bidTime<endDate, 
           Product.bidded=='no').fetch() 

Это выглядит действительно грязно. Гипотетически, я хотел бы иметь возможность сделать следующее. Является ли это возможным? Если да, то как?

condition = 'Product.bidTime>=startDate, Product.bidTime<endDate' 
if bidded = 'yes': 
    condition = condition + ', Product.bidded=='yes' 
elif bidded == 'no': 
    condition = condition + ', Product.bidded=='no' 
productRanks = Product.query(condition).fetch() 

ответ

2

Вы действительно должны потратить некоторое время на чтение документов, это сэкономит вам много времени.

См. https://developers.google.com/appengine/docs/python/ndb/queries#filter_by_prop Если вы прочитали этот раздел, он ясно показывает, что вы можете добавлять фильтры. Из документов этот пример довольно ясен.

qry1 = Account.query() # Retrieve all Account entitites 
qry2 = qry1.filter(Account.userid >= 40) # Filter on userid >= 40 
qry3 = qry2.filter(Account.userid < 50) # Filter on userid < 50 as well 

И вам не нужно создавать новый запрос, просто продолжайте перепроверять одну и ту же переменную.

+0

Спасибо. Но еще одна проблема заключается в следующем: когда я выполнял фильтрацию в разных полях, я получил сообщение об ошибке _ «Поддерживается только один фильтр неравенства для каждого запроса. Обнаружены оба ...» _ –

+0

Правильно. Сообщение об ошибке отражает ограничения возможностей запроса хранилища данных. Вероятно, вам придется изменить свою модель, чтобы агрегировать различные значения во время записи, чтобы сделать запросы, которые вы хотите. –

+1

он также может заплатить, чтобы посмотреть на поиск api и посмотреть, какие запросы там возможны. –

Смежные вопросы