Twoje zajęcia ORM wyglądają dobrze. To zapytanie jest nieprawidłowe.
Krótko mówiąc, otrzymujesz błąd „InstrumentedAttribute”, ponieważ niewłaściwie używasz session.query
metoda.
Z dokumentów
session.query
Metoda przyjmuje jako argumenty „SomeMappedClass” lub „entities”. Masz zdefiniowane 2 zmapowane klasy, Tournament
i TournamentMaster
. Te „elementy” to zazwyczaj albo Twoje zmapowane klasy (obiekty ORM) albo Kolumna tych zmapowanych klas.
Jednak przechodzisz w Tournament.tournament_master.id_
która nie jest „MappedClass” ani kolumną, a zatem nie „jednostką”, która session.query
może konsumować.
Innym sposobem, aby na to spojrzeć, jest wywołanie Tournament.tournament_master.id_
próbujesz uzyskać dostęp do rekordu „TournamentMaster” (lub instancji) z klasy „Tournament”, co nie ma sensu.
Nie jest dla mnie zbyt jasne, co konkretnie masz nadzieję zwrócić z zapytania. W każdym razie jednak tutaj jest początek.
Zamiast
qry = session.query(Tournament.tournament_master.id_).limit(100)
spróbuj
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Może to również działać (nie testowano), aby zwrócić tylko pole id_, jeśli masz taki zamiar
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)