Считайте, что у меня есть следующие модели -
class Team(db.Model): # say I have just 5 teams
name = db.StringProperty()
class Player(db.Model): # say I have thousands of players
name = db.StringProperty()
team = db.ReferenceProperty(Team, collection_name="player_set")
Имя ключа для каждой сущности Команды = 'team_', и для каждой сущности Игрока = 'игрок _'
По какой-то предварительной договоренности у меня есть доступное сопоставление сущности Команды (имя-ключа, имя). Например (team_01, Соединенные Штаты Америки), (team_02, Россия) и т. Д.
Я должен показать всех игроков и их команды на странице. Один из способов сделать это будет -
players = Player.all().fetch(1000) # This is 1 DB read
for player in players: # This will iterate 1000 times
self.response.out.write(player.name) # This is obviously not a DB read
self.response.out.write(player.team.name) #This is a total of 1x1000 = 1000 DB reads
То есть чтение 1001 БД для глупости.
Интересная часть состоит в том, что когда я выполняю db.to_dict () для игроков, это показывает, что для каждого игрока в этом списке есть «имя» игрока и есть «имя_ключа» команды доступно тоже.
Так, как я могу сделать ниже ??
players = Player.all().fetch(1000) # This is 1 DB read
for player in players: # This will iterate 1000 times
self.response.out.write(player.name) # This is obviously not a DB read
self.response.out.write(team_list[player.<SOME WAY OF GETTING TEAM KEY NAME>]) # Here 'team_list' already has (key_name, name) for all 5 teams
Я давно с этим борюсь. Прочитал каждую доступную документацию.
Я мог бы просто обнять человека, который может помочь мне здесь: -)
Отказ от ответственности: приведенное выше описание проблемы не является реальным сценарием. Это упрощенная схема, которая точно представляет мою проблему. Я столкнулся с этим в комплексном тестере и большом приложении GAE.