Механизм приложения Google – запрос только для поля

Примечание: этот пример просто иллюстрирует проблему, а не реальный вариант использования

Я хотел бы знать, есть ли у меня определенные объекты, например Car и CarCategory:

Owner
     - name
     - age

Car 
     - name
     - brand
     - category( reference )
     - owner ( reference )

CarCategory
     - name
     - property

Могу ли я запросить определенное поле?

Например, категория автомобилей:

query = GqlQuery("ВЫБЕРИТЕ категорию ИЗ автомобиля")

Я получаю сообщение об ошибке: BadQueryError: Ошибка синтаксического анализа: не ожидается дополнительных символов в символе Car

Обновление: что делать, если вы хотите получить список всех категорий, принадлежащих определенному пользователю

Я хотел бы сделать это максимально эффективным способом.


person Mc-    schedule 01.07.2011    source источник


Ответы (2)


Вы не можете запрашивать отдельные поля в хранилище данных App Engine. Сущности хранятся и извлекаются как сериализованные буферы протоколов целиком, поэтому невозможно получить только определенные поля.

Учитывая абстракцию db.Model, также не было бы разумного способа представить возвращаемые данные — вы не можете просто предоставить модель с заполненными только некоторыми полями, так как это может нарушить ограничения и определенно вызовет проблемы, если вы попытаетесь сохранить его обратно в хранилище данных!

В ответ на ваше обновление: для этого обычно требуется соединение и агрегат, ни один из которых не поддерживается в App Engine. Лучше всего запросить и получить все Car объекты пользователя, а также самостоятельно классифицировать по Category свойству.

person Nick Johnson    schedule 04.07.2011

Похоже, у вас здесь больше возможностей, чем сортировка самостоятельно. Вы можете создать уникальное имя_ключа для каждой из ваших категорий, например «Бронко», или использовать уникальный созданный ключ «8HJ876KKL» (возможно, созданный uuid). Затем в объекте Car у вас может быть StringProperty с key_name категории. Вы можете сделать это StringListProperty, если хотите, чтобы автомобили принадлежали более чем к одной категории. Затем вы можете запросить категорию по key_name.

Другой вариант — использовать ReferenceProperty в Car для указания на объект категории. Затем вы можете запросить точный ключ при поиске каждого автомобиля, принадлежащего категории.

Я не уверен, насколько эффективны запросы по сравнению с ReferenceProperty, StringProperty и StringListProperty.

person powerspowers    schedule 11.08.2013