sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué no puedo generar una consulta usando relaciones?

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)