【发布时间】:2021-11-22 09:37:34
【问题描述】:
我在比赛和球队之间建立了多对多的关系,其中不止一支球队可以参加一场比赛,而且每支球队都可以参加多场比赛。这些模型是:
class Match(db.Model):
__tablename__ = 'match'
id = Column(
db.Integer,
primary_key=True,
autoincrement=True)
teams = db.relationship('Team', secondary='team_match_link')
class Team(db.Model):
__tablename__ = 'team'
id = Column(
db.Integer,
primary_key=True,
autoincrement=True)
matches = db.relationship('Match', secondary='team_match_link')
class TeamMatchLink(db.Model):
__tablename__ = 'team_match_link'
match_id = Column(
db.Integer,
db.ForeignKey('match.id'),
primary_key=True
)
team_id = Column(
db.Integer,
db.ForeignKey('team.id'),
primary_key=True
)
给定两支球队[T1, T2],我如何查询只包含这两个球队而不包含其他球队的比赛?
这给了我至少包含两支球队的比赛,然后我当然可以检查这些比赛中是否还有其他球队。但它看起来很难看,我确定有更好/更有效的方法吗?理想情况下,该解决方案应该适用于 n 团队,而不会让我陷入循环地狱。
res1 = match.query.filter(match.team.any(id=T1.id)).all()
res2 = match.query.filter(match.team.any(id=T2.id)).all()
res = [i for i in res1 if i in res2]
【问题讨论】:
-
(缺少导入)
-
真的应该有两支以上的队伍参加一场比赛吗?
-
@Detlef 是的,当然,这取决于一项运动。
标签: flask sqlalchemy many-to-many