通过两个表连接查询Flask-SQLAlchemy

时间:2017-01-06 06:46:17

标签: sql python-3.x flask sqlalchemy flask-sqlalchemy

我有三张桌子(适用于运动相关的应用程序):轮次,游戏和联赛。

我想找到最近一轮联赛。要做到这一点,我需要找到最新的游戏并找到它的圆形。

在我的模型中,Rounds有许多游戏和轮次都有联盟,但游戏和联赛之间没有直接关系。

这里简化了我的模型:

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()

2 个答案:

答案 0 :(得分:2)

在SQLAlchemy文档上花了好几个小时后,解决方案只是在定义连接时我需要更明确。我认为表连接对于SQLAlchemy来说并不是显而易见的。

而不仅仅是#ifndef PEON_HH_ # define PEON_HH_ #include "Sorcerer.hh" #include "Victim.hh" #include <iostream> #include <iomanip> #include <string> class Peon : public Victim { std::string _name; public: Peon(std::string); virtual ~Peon(); virtual void getPolymorphed() const; std::string getName() const; }; #endif /* !PEON_HH_ */ 我必须告诉它加入join(League)

的位置

查询最终看起来像这样:

join(League, Round.league_id == League.id)

答案 1 :(得分:1)

您错过了LeagueRound之间的关系。

class League(db.Model):
    (...)
    db.relationship("Round", backref='league')
    (...)

将您的查询添加到League模型后,您的查询应该有效。