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)