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)