У меня есть три таблицы (для приложения, связанного с спортом): раунды, игры и лиги.Querying Flask-SQLAlchemy через два столовых объединения
Я хочу найти самый последний раунд для Лиги. Для этого мне нужно найти самую последнюю игру и найти, в каком раунде она находится.
В моих моделях У раундов есть много Игр и Раундов, есть Лига, но нет прямых отношений между Играми и Лигами.
Вот мои модели упрощено:
class Round(db.Model):
"""Round Model."""
__tablename__ = 'rounds'
id = db.Column(db.Integer, primary_key=True)
order = db.Column(db.Integer, nullable=False)
league_id = db.Column(db.Integer, db.ForeignKey('leagues.id'))
league = db.relationship('League', backref='rounds')
class Game(db.Model):
"""Game model."""
__tablename__ = "games"
id = db.Column(db.Integer, primary_key=True)
utc_time = db.Column(db.DateTime)
round_id = db.Column(db.Integer, db.ForeignKey('rounds.id'))
round = db.relationship('Round', backref="games")
class League(db.Model):
"""League Model."""
__tablename__ = 'leagues'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
def __init__(self, name, abbreviation, other_names):
self.name = name
Как я запрашиваю Игры с round.league состоянии?
Я что-то вроде этого думать, но это не работает:
game = Game.query.join(Round).join(League).filter(
Game.utc_time < datetime.utcnow(),
League.id == league.id
).order_by(Game.utc_time.desc()).first()
Благодарности @AArias. Раздражающе для всех, у меня есть эти отношения там, только на круглой модели (точно так же, только наоборот). Мои извинения, я случайно удалил эту строку при редактировании вопроса и добавил его обратно. – hammygoonan
Мм. Вы пытались обратить вспять объявления отношений? Попробуйте объявить отношения Лиги-Раунда в модели лиги (как в моем примере кода) и Round-Game в модели Round. Я не могу попробовать это сейчас, потому что я нахожусь на своем телефоне, но, по крайней мере, в примерах sqlalchemy для отношений один-два, отношения объявлены в родительской модели: http://docs.sqlalchemy.org/en/latest/ orm/basic_relationships.html # один-ко-многим, дайте мне знать, если это работает, и я обновлю ответ – AArias
Кроме того, оставьте 'league_id' и' round_id' такими, какие они есть. – AArias