あなたのORMクラスはうまく見えます。間違っているのはクエリです。
つまり、session.query
を誤用しているため、「InstrumentedAttribute」エラーが発生します。 メソッド。
ドキュメントから
session.query
メソッドは引数として「SomeMappedClass」または「entities」を取ります。 Tournament
という2つのマップされたクラスが定義されています 、およびTournamentMaster
。これらの「エンティティ」は通常、マップされたクラス(ORMオブジェクト)またはこれらのマップされたクラスの列のいずれかです。
ただし、Tournament.tournament_master.id_
を渡しています。 これは「MappedClass」または列ではないため、session.query
の「エンティティ」ではありません。 消費することができます。
別の見方をすると、Tournament.tournament_master.id_
を呼び出すことです。 「Tournament」クラスから「TournamentMaster」レコード(またはインスタンス)にアクセスしようとしていますが、これは意味がありません。
クエリから何を返したいのか、私にはわかりません。いずれにせよ、ここからが始まりです。
代わりに
qry = session.query(Tournament.tournament_master.id_).limit(100)
試してみてください
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
これは、意図した場合にのみid_フィールドを返すように機能する(テストされていない)場合もあります
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)