Tus clases de ORM se ven bien. Es la consulta la que es incorrecta.
En resumen, obtiene ese error "InstrumentedAttribute" porque está haciendo un mal uso de session.query
método.
De los documentos
la session.query
El método toma como argumentos, "SomeMappedClass" o "entidades". Tienes 2 clases mapeadas definidas, Tournament
y TournamentMaster
. Estas "entidades" suelen ser sus clases asignadas (objetos ORM) o una columna de estas clases asignadas.
Sin embargo, está pasando Tournament.tournament_master.id_
que no es una "clase asignada" o una columna y, por lo tanto, no es una "entidad" que session.query
puede consumir.
Otra forma de verlo es llamar a Tournament.tournament_master.id_
está intentando acceder a un registro (o instancia) de 'TournamentMaster' desde la clase 'Torneo', lo cual no tiene sentido.
No me queda muy claro qué es exactamente lo que espera obtener de la consulta. En cualquier caso, aquí hay un comienzo.
En lugar de
qry = session.query(Tournament.tournament_master.id_).limit(100)
prueba
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Esto también puede funcionar (no se ha probado) para devolver solo el campo id_, si esa es su intención
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)