Ihre ORM-Klassen sehen gut aus. Die Abfrage ist falsch.
Kurz gesagt, Sie erhalten diesen "InstrumentedAttribute"-Fehler, weil Sie die session.query
missbrauchen Methode.
Aus der Dokumentation
die session.query
Methode nimmt als Argumente "SomeMappedClass" oder "entities". Sie haben 2 zugeordnete Klassen definiert, Tournament
und TournamentMaster
. Diese "Entitäten" sind normalerweise entweder Ihre zugeordneten Klassen (ORM-Objekte) oder eine Spalte dieser zugeordneten Klassen.
Sie übergeben jedoch Tournament.tournament_master.id_
die keine "MappedClass" oder eine Spalte und somit keine "Entität" der session.query
ist verbrauchen kann.
Eine andere Betrachtungsweise ist der Aufruf von Tournament.tournament_master.id_
Sie versuchen, auf einen 'TournamentMaster'-Datensatz (oder eine Instanz) aus der 'Tournament'-Klasse zuzugreifen, was keinen Sinn ergibt.
Mir ist nicht ganz klar, was genau Sie von der Abfrage zurückgeben möchten. Auf jeden Fall ist hier ein Anfang.
Statt
qry = session.query(Tournament.tournament_master.id_).limit(100)
versuchen
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Dies kann auch funktionieren (nicht getestet), um nur das id_-Feld zurückzugeben, wenn Sie dies beabsichtigen
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)