Нужно объяснить новичку разницу между использованием отношения родитель-сущность и ReferenceProperty - PullRequest
1 голос
/ 12 февраля 2010

В отношении этого утверждения в документации по Google App-Engine:

"Используйте группы объектов только тогда, когда они необходимы для транзакций. Для других отношений между объектами используйте свойства ReferenceProperty и значения Key, которые можно использовать в запросах."

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

Как бы вы закодировали запрос, запрашивающий всех игроков определенной команды?

1 Ответ

1 голос
/ 12 февраля 2010

Транзакция не имеет ничего общего с тем, как организованы данные, это особая операция базы данных. Внутри транзакции вы можете выполнять несколько операций чтения и записи, и все это успешно или неудачно. Ограничение состоит в том, что все затронутые объекты должны быть в одной группе. Если бы вы использовали транзакции, вы бы знали, что это так: поиск данных команды не делает транзакцию.

Если ваши игроки используют эталонное свойство для указания команды, вы запросите это в GQL, где WHERE team=KEY('Team', <id>), <id> - идентификатор объекта команды. Кроме того, вы можете сделать это:

for player in team.player_set:
    # iterating over the players in the team...

Когда у вида Player есть свойство ссылки на вид Team, команды автоматически получают эту коллекцию player_set (ну, на самом деле это запрос), которую вы можете повторять. Это называется "обратная ссылка"

...