GAE: превращение множества запросов в один

1

У меня есть база данных продуктов, содержащая строковое свойство с именем '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....
}

.. Фредрик

Теги:
google-app-engine
google-cloud-datastore

1 ответ

2
Лучший ответ

Вы можете использовать оператор IN. Это создаст три разных запроса и сгруппирует результаты вместе для вас под сценой. См. docs:

GQL не имеет оператора OR. Однако у него есть оператор IN, который предоставляет ограниченную форму OR.

Оператор IN сравнивает значение a свойство для каждого элемента в списке. Оператор IN эквивалентен множеству = запросов, по одному для каждого значения, которые ORed вместе. Объект, значение которого для данного свойства равно любому из значения в списке могут быть возвращены для запроса.

Примечание. Операторы IN и!= используют несколько запросов за кулисами. Например, оператор IN выполняет отдельный базовый запрос хранилища данных для каждого элемента в списке. возвращенные объекты являются результатом кросс-продукт всех основных запросы хранилища данных и де-дублированы. Максимум 30 запросы на хранилище разрешены для любых один запрос GQL.

  • 0
    Разве ProductParts.gql ("WHERE type =: type", type = "color") не будет таким же, как при использовании всего запроса?
  • 0
    Да, это создаст запрос gql для вас, но вы также можете сделать p = ProductParts.gql("WHERE type IN :types", types=["color", "style", "size"])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню