Le tue lezioni ORM sembrano a posto. È la query che non è corretta.
In breve, ricevi quell'errore "InstrumentedAttribute" perché stai usando in modo improprio session.query
metodo.
Dai documenti
il session.query
il metodo accetta come argomenti "SomeMappedClass" o "entities". Hai 2 classi mappate definite, Tournament
e TournamentMaster
. Queste "entità" sono in genere le tue classi mappate (oggetti ORM) o una colonna di queste classi mappate.
Comunque stai passando Tournament.tournament_master.id_
che non è una "MappedClass" o una colonna e quindi non un'"entità" che session.query
può consumare.
Un altro modo per vederlo è chiamando Tournament.tournament_master.id_
stai tentando di accedere a un record (o istanza) "TournamentMaster" dalla classe "Torneo", il che non ha senso.
Non è molto chiaro per me cosa esattamente speri di restituire dalla query. In ogni caso però ecco un inizio.
Invece di
qry = session.query(Tournament.tournament_master.id_).limit(100)
prova
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Questo potrebbe anche funzionare (non testato) per restituire solo il campo id_, se questa è la tua intenzione
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)