Dine ORM-timer ser fine ud. Det er forespørgslen, der er forkert.
Kort sagt får du fejlen "InstrumentedAttribute", fordi du misbruger session.query
metode.
Fra dokumenterne
session.query
metoden tager "SomeMappedClass" eller "entities" som argumenter. Du har defineret 2 kortlagte klasser, Tournament
, og TournamentMaster
. Disse "entiteter" er typisk enten dine tilknyttede klasser (ORM-objekter) eller en kolonne af disse tilknyttede klasser.
Men du passerer Tournament.tournament_master.id_
som ikke er en "MappedClass" eller en kolonne og dermed ikke en "entity", der session.query
kan forbruge.
En anden måde at se det på er ved at kalde Tournament.tournament_master.id_
du forsøger at få adgang til en 'TournamentMaster'-record (eller instans) fra 'Tournament'-klassen, hvilket ikke giver mening.
Det er ikke helt klart for mig, hvad du præcist håber på at vende tilbage fra forespørgslen. Under alle omstændigheder, men her er en start.
I stedet for
qry = session.query(Tournament.tournament_master.id_).limit(100)
prøv
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Dette kan også virke (ikke testet) til kun at returnere id_-feltet, hvis det er din hensigt
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)