Flask 属性错误:两者都不是';仪表属性';对象nor';比较器';与关联的对象

Flask 属性错误:两者都不是';仪表属性';对象nor';比较器';与关联的对象,flask,sqlalchemy,foreign-keys,Flask,Sqlalchemy,Foreign Keys,我有一个表定义为 class Results(db.Model): __tablename__ = 'results' event_id = db.Column(db.Integer, db.ForeignKey(Events.id), primary_key=True) event = db.relationship('Events', foreign_keys='Results.event_id') team_id = db.Column(db.Integer

我有一个表定义为

class Results(db.Model):
    __tablename__ = 'results'
    event_id = db.Column(db.Integer, db.ForeignKey(Events.id), primary_key=True)
    event = db.relationship('Events', foreign_keys='Results.event_id')
    team_id = db.Column(db.Integer, db.ForeignKey(Teams.id), primary_key=True)
    team = db.relationship('Teams', foreign_keys='Results.team_id')
    position = db.Column(db.Integer, default=0)
    rr_position = db.Column(db.Integer, default=0)
    score = db.Column(db.Float, default=0)

当我运行以下命令时

r = Results.query.all()
print(len(r))
我有138排

如果我跑

r =  db.session.query(Teams.name
    , Results.team_id
    , Results.event_id).all()
print(len(r))

然后我得到了6072行。通过这个查询,我希望有138行,每个行有一个团队名称

但是如果我尝试

r ==  db.session.query(Results.team.name
    , Results.team_id
    , Results.event_id).all()
我得到以下错误


AttributeError:与结果关联的“InstrumentedAttribute”对象和“Comparator”对象都没有。团队具有属性“name”

执行查询时是否尝试显式指定联接

例如:

db.session.query(Results.team_id, Results.event_id, Team.name).join(Team).all()

我假设在返回>6000个条目的情况下,您将得到笛卡尔结果。

谢谢,这是可行的。在什么条件下可以使用关系,什么时候不能使用关系?如果希望基于字段的两个表之间的交集,则需要显式指定联接。在本例中,您正在寻找内部联接。
r ==  db.session.query(Results.team.name
    , Results.team_id
    , Results.event_id).all()
db.session.query(Results.team_id, Results.event_id, Team.name).join(Team).all()