我有三张桌子(适用于运动相关的应用程序):轮次,游戏和联赛。
我想找到最近一轮联赛。要做到这一点,我需要找到最新的游戏并找到它的圆形。
在我的模型中,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()
答案 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)
您错过了League
和Round
之间的关系。
class League(db.Model):
(...)
db.relationship("Round", backref='league')
(...)
将您的查询添加到League
模型后,您的查询应该有效。