Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi ne puis-je pas générer de requête à l'aide de relations ?

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)