我是SQL Alchemy的新手,并且遇到了一些从连接中获得所需结果的问题。 我有以下型号
class QShow(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
starts_on = db.Column(db.Date)
ends_on = db.Column(db.Date)
form_id = db.Column(db.String(50))
class Competition(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60))
show_id = db.Column(db.Integer,db.ForeignKey('q_show.id'))
show = db.relationship("QShow", backref=db.backref("showa", uselist=False))
class Start(db.Model):
id = db.Column(db.Integer, primary_key=True)
rider_id = db.Column(db.Integer, db.ForeignKey('rider.id'))
rider = db.relationship("Rider", backref=db.backref("riders", uselist=False))
competition_id = db.Column(db.Integer, db.ForeignKey('competition.id'))
competition = db.relationship("Competition", backref=db.backref("competitiona", uselist=False))
show_id = db.Column(db.Integer, db.ForeignKey('q_show.id'))
show = db.relationship("QShow", backref=db.backref("shows",uselist=False))
class Rider(db.Model):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(30))
last_name = db.Column(db.String(35))
starts = db.relationship('Start',backref='riderref',lazy='dynamic')
对于每个节目,有多个比赛,每个比赛有多个比赛,骑手需要开始参加比赛,他们可以有多个比赛。所有这些都是节目的一部分。
竞争和开始数据很容易查询,因为它们具有show_id的FK。但是我希望让所有车手参加一个特定的节目。
通过这个查询,无论节目如何,我都会得到所有车手。我知道我错过了什么。
rider = Rider.query \
.join(Start) \
.join(Competition) \
.filter(QShow.id == show_id)
有人能帮助我理解这种疯狂吗?
更新1
我已经尝试将QShow添加到联接中,这是有道理的,但我仍然会收到所有节目中的骑手。
rider = Rider.query \
.join(Start) \
.join(Competition) \
.join(QShow)\
.filter(QShow.id == show_id)
更新2
在考虑它时,我做了一个有效的解决方法,但是我仍然想要了解我从Rider一直到加入的错误 - >展。
rider = Rider.query \
.join(Start) \
.filter(Start.show_id == show_id)
答案 0 :(得分:0)
@univerio是对的。问题是数据库外键不一致。一旦我解决了这个问题,连接语句就能很好地完成。