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)