Dina ORM-klasser ser bra ut. Det är frågan som är felaktig.
Kort sagt, du får det här "InstrumentedAttribute"-felet eftersom du missbrukar session.query
metod.
Från dokumenten
session.query
metoden tar som argument "SomeMappedClass" eller "entities". Du har 2 mappade klasser definierade, Tournament
, och TournamentMaster
. Dessa "entiteter" är vanligtvis antingen dina mappade klasser (ORM-objekt) eller en kolumn av dessa mappade klasser.
Men du passerar Tournament.tournament_master.id_
som inte är en "MappedClass" eller en kolumn och alltså inte en "entitet" som session.query
kan konsumera.
Ett annat sätt att se på det är att anropa Tournament.tournament_master.id_
du försöker komma åt en 'TournamentMaster'-post (eller instans) från 'Tournament'-klassen, vilket inte är vettigt.
Det är inte superklart för mig exakt vad du hoppas få tillbaka från frågan. I alla fall men här är en början.
Istället för
qry = session.query(Tournament.tournament_master.id_).limit(100)
försök
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Detta kan också fungera (inte testat) för att bara returnera id_-fältet, om det är din avsikt
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)