У меня есть эта структура базы данных (определение, подобное 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?