Vaše třídy ORM vypadají dobře. Je to dotaz, který je nesprávný.
Stručně řečeno, dostáváte chybu "InstrumentedAttribute", protože nesprávně používáte session.query
metoda.
Z dokumentů
session.query
metoda bere jako argumenty "SomeMappedClass" nebo "entity". Máte definované 2 mapované třídy, Tournament
a TournamentMaster
. Tyto "entity" jsou obvykle buď vaše namapované třídy (ORM objekty) nebo sloupec těchto mapovaných tříd.
Vy však předáváte v Tournament.tournament_master.id_
což není „MappedClass“ nebo sloupec, a tedy ani „entita“, která session.query
může konzumovat.
Dalším způsobem, jak se na to podívat, je volání Tournament.tournament_master.id_
pokoušíte se o přístup k záznamu 'TournamentMaster' (nebo instanci) z třídy 'Tournament', což nedává smysl.
Není mi úplně jasné, co přesně doufáte, že se vrátíte z dotazu. V každém případě, tady je začátek.
Místo
qry = session.query(Tournament.tournament_master.id_).limit(100)
zkuste
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
To může také fungovat (netestováno), že vrátí pouze pole id_, pokud je to vaším záměrem
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)