SQLAlchemy оптимизирует количество запросов для вложенных данных - PullRequest
0 голосов
/ 09 марта 2020

У меня есть эта структура базы данных (определение, подобное SQLAlchemy):

class Sport:
    id = Column(Integer, primary_key=True)

class Team:
    id = Column(Integer, primary_key=True)
    sport_id = Column(Integer, ForeignKey('sports.id')) # relationship to Sport

class League:
    id = Column(Integer, primary_key=True)
    sport_id = Column(Integer, ForeignKey('sports.id')) # relationship to Sport

class Match:
    id = Column(Integer, primary_key=True)
    team_home_id = Column(Integer, ForeignKey('teams.id')) # relationship to Team
    team_away_id = Column(Integer, ForeignKey('teams.id')) # relationship to Team
    league_id = Column(Integer, ForeignKey('leagues.id')) # relationship to League

class Bet:
    id = Column(Integer, primary_key=True)
    match_id = Column(Integer, ForeignKey('matches.id')) # relationship to Match

Теперь я хотел бы показать сводную страницу в своем приложении: для каждого вида спорта две таблицы: всех команд и лиг. И в этих таблицах для каждой команды и лиги количество связанных матчей и связанных ставок.

В настоящее время я делаю это следующим образом (Python / pseudocode):

for sport in sports:
  print("<sport framing, league table header>")
    for league in sport.leagues:
      matches = league.matches
      print(league.name, len(matches),
            sum([len(match.bets) for match in matches]))
  print("<match table header>")
    for team in sport.teams:
      matches = team.home_matches + team.away_matches
      print(league.name, len(matches),
            sum([len(match.bets) for match in matches]))

Проблема с этим что он выдает запрос к базе данных каждый раз, когда запускает все oop - один для спорта, для каждого вида спорта для лиг и один для команд, и для каждого из них для матчей, и для каждого матча один для ставок.

Разве плохо делать столько запросов? Я предполагаю, что, как я могу получить столько данных заранее при меньшем количестве запросов с помощью SQLAlchemy?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...