У меня есть база данных продуктов, содержащая строковое свойство с именем 'type'. Я пытаюсь получить все продукты определенного типа (иногда более одного типа).
Я попытался использовать метод фильтра GAE, но не могу заставить его работать правильно.
Единственное решение, с которым я работал, - создать новый db.GqlQuery для каждого типа.
Причина, по которой мне нужно получить каждый по типу, - отображать их в разных на стороне клиента?
Есть ли способ использовать только один запрос для этого?
В настоящее время это выглядит так:
productPartsEntries = {
'color' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'color'),
'style' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'style'),
'size' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'size')
// add more....
}
.. Фредрик
Вы можете использовать оператор IN. Это создаст три разных запроса и сгруппирует результаты вместе для вас под сценой. См. docs:
GQL не имеет оператора OR. Однако у него есть оператор IN, который предоставляет ограниченную форму OR.
Оператор IN сравнивает значение a свойство для каждого элемента в списке. Оператор IN эквивалентен множеству = запросов, по одному для каждого значения, которые ORed вместе. Объект, значение которого для данного свойства равно любому из значения в списке могут быть возвращены для запроса.
Примечание. Операторы IN и!= используют несколько запросов за кулисами. Например, оператор IN выполняет отдельный базовый запрос хранилища данных для каждого элемента в списке. возвращенные объекты являются результатом кросс-продукт всех основных запросы хранилища данных и де-дублированы. Максимум 30 запросы на хранилище разрешены для любых один запрос GQL.
p = ProductParts.gql("WHERE type IN :types", types=["color", "style", "size"])