class Match(Base):
tablename = ‘matches’
id = Column(Integer, primary_key=True)
date = Column(Date, nullable=False)
time = Column(Time, nullable=True)
league_id = Column(ForeignKey('leagues.id'), nullable=False, index=True)
league = relationship('League', backref='matches')
type = Column(enums.matches_types)
home_team_id = Column(ForeignKey('teams.id'), nullable=False, index=True)
home_team = relationship('Team', foreign_keys=[home_team_id], backref='home_matches')
away_team_id = Column(ForeignKey('teams.id'), nullable=False, index=True)
class Team(Base):
__tablename__ = 'teams'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
country_id = Column(ForeignKey('countries.id'), nullable=False, index=True)
country = relationship('Country', backref='teams')
我需要编写一个查询,该查询将列和团队表连接在一起,以显示本地和客队的团队信息。
Session.query(Match.date, Match.home_team.name, Match_away_team.name).joins(Team)
这返回 Can't determine join between 'matches' and 'teams'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly
首先,您的代码不起作用的原因是因为SQLAlchemy不知道您是否要Team
通过viahome_team
或加入away_team
,因此您必须告诉它。此外,您需要加入Team
两次,这使事情变得更加复杂。
使用joinedload
以下命令可以更轻松地完成此操作:
matches = session.query(Match).options(joinedload(Match.home_team),
joinedload(Match.away_team))
for m in matches:
print m.date, m.home_team, m.away_team
m.home_team
并且m.away_team
将在相同的查询被装载m
使用JOIN
。
如果你坚持使用一个明确的.join()
,你得别名的Team
实体(未测试):
home = aliased(Team)
away = aliased(Team)
q = session.query(Match.date, home, away).join(home, Match.home_team) \
.join(away, Match.away_team)
for date, home_team, away_team in q:
print date, home_team, away_team
问题内容: 我正在尝试找出SQLAlchemy中正确的联接查询设置,但似乎无法解决。 我有以下表格设置(简化后,我省略了非必要字段): 因此,关系如下: 1:n Group Member 1:n Member Item 1:n Version Item 我想通过从数据库中选择具有特定版本的所有项目行来构建查询。然后,我想按组然后按成员订购。使用Flask / WTForm的输出应如下所示: 我想出
问题内容: 我想添加代表其他表计数的列。 我有3张桌子。 留言内容 主题 星星_吉文 我要结束于: Topic_Review 因此,基本上我想在3列中附加唯一值的计数(每个主题中给定的星数,在主题中具有消息的唯一用户以及每个主题中的唯一消息数)。 我希望最终也能够过滤类别(在两列中均可见)。 此外,我最终希望按加入的人数进行排序。例如,我将要有一个按钮,该按钮按升序按“星数”排序,或按降序按“用户
我对以下查询有问题: 这个想法是把包括邮资在内的订单总价拿回来。 已订购的项目-包括所有已订购的项目(因此可以有多行) 订单-包括订单的邮资价格(这里每个订单只有一行) 我遇到的问题是,如果订单中包含多个“ordered_items”项目,则上述金额会多次计算“orders”中的邮资。 如何重写此查询,使邮资只计算一次? 提前感谢任何帮助。
问题内容: 我有一个要求,我需要限制从表返回的特定标志和所有记录的其他标志值的记录数。 例如:table有一个名为的元素,可能的值为’m’和’o’。 我只需要返回10条“ o”记录和所有“ m”记录。 我正打算为此与工会写一个查询。像这样: 这可能吗?请注意,它是一个JPA查询。(contact_history是对象名称) 任何其他更好的建议,欢迎您! 问题答案: 不,这对于JPQL是不可能的,因
如何修改此ffmpeg字符串以生成具有不同视频比特率的多个输出?这是为了在yadif=1消耗大量电力时节省时间。而且,无法让它在windows中接受yadif_cuda。 ffmpeg-y-f lavfi-i anullsrc=cl=mono:sample_rate=48000-i“test.mxf”-vf yadif=1-s 1920:1080-c:v h264-nvenc-强制关键帧“expr
问题内容: 当我在where子句中对select中的同一表进行引用时,linq to Nhibernate会生成两个联接,一个用于select,一个用于where。IE 生成如下的SQL: 我本以为我应该更喜欢SQL: 有没有一种方法可以构造查询来实现这一点?有关系吗? 问题答案: 您是否尝试过比较SSMS中每个查询的查询执行计划?如果在SQL Server中消除了重复的联接,则没关系。我发现在某