2017-02-14 23 views
1

Этот набор запросов, приведенных ниже, объединяет кучу профилей вместе для возврата на веб-сайт.Заказ запроса

Я хотел бы сделать один запрос с ними, потому что я хотел бы использовать функцию заказа для всей коллекции профилей.

# Get all users for who 'currentUser' is an assistant for. 
users = Users.query(Users.assistant.IN(currentUser)).fetch() 

# Get all profiles that belong to those users and have not been deleted. 
for user in users: 
    profiles = profiles + Profiles.query(
      ndb.AND(
      Profiles.user == user.username, 
      Profiles.deleted == False 
     ) 
    ).order(Profiles.history).fetch() # Order all profiles by timestamp 

ответ

0

Что вы ищете будет, таким образом, что эквивалентно:

# get the list of usernames obtained above 
usernames = [user.username for user in users] 

profiles = Profiles.query(ndb.AND(Profiles.user.IN(usernames), 
            Profiles.deleted == False)) 
         .order(Profiles.history).fetch() 

Но это будет иметь проблемы с производительностью, если usernames содержит множество элементов (по-видимому, более чем на 10 или около того), см Does the NDB membership query ("IN" operation) performance degrade with lots of possible values?.

+0

Работал как очарование, спасибо! –