2016-08-28 24 views
2

に関連付けられている '比較' オブジェクトどちらも私は、次のはAttributeError: 'InstrumentedAttribute' オブジェクトも

r = Results.query.all() 
print(len(r)) 

を実行すると

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) 

class Teams(db.Model): 
    __tablename__ = 'teams' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64), nullable=False) 
    country = db.Column(db.String(64), nullable=False) 

として定義されたテーブルを持っています私は138行を取得します。

私は

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

または

r = Results.query.add_column(Teams.name).all() 
print(len(r)) 

を実行した場合、私は6072行を取得。このクエリでは、それぞれ138行と1つのチーム名が必要です。

しかし、私は

r == db.session.query(Results.team.name 
    , Results.team_id 
    , Results.event_id).all() 

をしようとすると、私は次のようなエラーに

はAttributeError取得:Results.teamに関連付けられている '比較' オブジェクトは、属性 '名前'

答えて

0
がありどちらも 'InstrumentedAttribute' オブジェクトをも

クエリを実行するときに明示的に結合を指定しようとしましたか?例えば

:私は> 6000件のエントリが返された場合には想定しています

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

、あなたはデカルト結果を得ています。

+0

ありがとうございました。関係はどのような条件で使用できますか? –

+0

フィールドに基づいて2つのテーブルの共通部分を使用する場合は、明示的に結合を指定する必要があります。この場合、内部結合を探しています。 – DanGar