Vos classes ORM semblent bien. C'est la requête qui est incorrecte.
En bref, vous obtenez cette erreur "InstrumentedAttribute" parce que vous utilisez mal le session.query méthode.
De la documentation
le session.query prend comme arguments "SomeMappedClass" ou "entities". Vous avez 2 classes mappées définies, Tournament , et TournamentMaster . Ces "entités" sont généralement soit vos classes mappées (objets ORM), soit une colonne de ces classes mappées.
Cependant vous passez en Tournament.tournament_master.id_ qui n'est pas une "MappedClass" ou une colonne et donc pas une "entité" qui session.query peut consommer.
Une autre façon de voir les choses est qu'en appelant Tournament.tournament_master.id_ vous essayez d'accéder à un enregistrement (ou instance) 'TournamentMaster' de la classe 'Tournament', ce qui n'a aucun sens.
Ce n'est pas très clair pour moi exactement ce que vous espérez revenir de la requête. Quoi qu'il en soit, voici un début.
Au lieu de
qry = session.query(Tournament.tournament_master.id_).limit(100)
essayez
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Cela peut également fonctionner (pas testé) pour ne renvoyer que le champ id_, si c'est votre intention
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)