Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum kann ich mithilfe von Beziehungen keine Abfrage generieren?

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)