Доступ к связанному объекту без использования объекта в App Engine

В общем, лучше всего сделать один запрос против многих запросов для данного объекта. Предположим, у меня есть куча объектов «сын», каждая с «отцом». Я получаю все объекты «сына»:

sons = Son.all() 

Тогда я хотел бы отдать всех отцов за эту группу сыновей. Я делаю:

  • Как передать параметры в драйвер Selenium Chrome с помощью Python?
  • Как удалить пакет python, который был установлен с помощью distutils?
  • Что такое Pythonic способ хранения блока данных в сценарии Python?
  • Почему не безопасно изменять последовательность, повторяющуюся?
  • верните верхние n наиболее часто встречающихся символов и их соответствующие значения в python
  • Индекс элементов дубликатов в списке python
  •  father_keys = {} for son in sons: father_keys.setdefault(son.father.key(), None) 

    Тогда я могу сделать:

     fathers = Father.get(father_keys.keys()) 

    Теперь это предполагает, что son.father.key () фактически не выполняет выборку объекта. Неужели я ошибаюсь? У меня есть куча кода, который предполагает, что object.related_object.key () фактически не извлекает связанный_объект из хранилища данных.

    Правильно ли я это делаю?

  • python получает переменное имя аргумента в функции
  • Как читать два входа, разделенных пробелом в одной строке?
  • Разделение выражения
  • Получение только ключа / id из ReferenceProperty в приложении Engine
  • python read next ()
  • Python int для двоичного?
  • 2 Solutions collect form web for “Доступ к связанному объекту без использования объекта в App Engine”

    Вы можете найти ответ, изучив источники appengine.ext.db в загрузке источников SDK App Engine – и ответ: нет, нет специального корпуса, который вам нужен: метод __get__ (строка 2887 в источники для SDK 1.3.0) дескриптора ReferenceProperty вызывается перед тем, как узнать, будет ли .key() или что-то еще в результате, поэтому у него просто нет возможности сделать оптимизацию, которая вам нужна.

    Однако , см. get_value_for_datastore 2929: метод get_value_for_datastore делает именно то, что вы хотите!

    В частности, вместо son.father.key() используйте Son.father.get_value_for_datastore(son) и в результате вы должны быть намного счастливее ;-).

    Я предпочел бы son.parent_key() сыновей и получить родительские ключи, используя son.parent_key() .

    parent_key ()

    Возвращает ключ родительского объекта этого экземпляра или None, если этот экземпляр не имеет родителя.

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

    После этого можно сразу получить экземпляры всех родителей с помощью db.get () .

    получить (ключи)

    Получает сущность или сущности для данного ключа или ключей любой Модели.

    Аргументы:

    ключи. Объект Key или список объектов Key .

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

    Python - лучший язык программирования в мире.