Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que não consigo gerar uma consulta usando relacionamentos?


Suas classes ORM parecem boas. É a consulta que está incorreta.

Em resumo, você está recebendo o erro "InstrumentedAttribute" porque está usando incorretamente o session.query método.

Dos documentos a session.query método leva como argumentos, "SomeMappedClass" ou "entidades". Você tem 2 classes mapeadas definidas, Tournament , e TournamentMaster . Essas "entidades" geralmente são suas classes mapeadas (objetos ORM) ou uma coluna dessas classes mapeadas.

No entanto, você está passando em Tournament.tournament_master.id_ que não é uma "MappedClass" ou uma coluna e, portanto, não é uma "entidade" que session.query pode consumir.

Outra maneira de ver isso é chamando Tournament.tournament_master.id_ você está tentando acessar um registro 'TournamentMaster' (ou instância) da classe 'Tournament', o que não faz sentido.

Não está muito claro para mim o que exatamente você espera retornar da consulta. Em qualquer caso, porém, aqui está um começo.

Ao invés de
qry = session.query(Tournament.tournament_master.id_).limit(100)

tentar
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)

Isso também pode funcionar (não testei) para retornar apenas o campo id_, se essa for sua intenção
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)