Ich verwende TurboGears2 und SQLAlchemy, um eine Webanwendung zu entwickeln. Ich habe zwei gemappte Tabellen O1 und O2. O2 hat eine sortierte Liste von O1s in 'Einsen'. Irgendwann möchte ich alle O2 und die referenzierten O1s abfragen.Probleme eiglading eine Reihe von Objekten mit SQLAlchemy
Leider schlägt die folgende Abfrage fehl, weil die Tabelle O2 in der Abfrage einen Alias enthält und die Spalte, auf die der Befehl order_by verweist, nicht mehr bekannt ist.
Ich würde gerne wissen, wie ich dieses Problem beheben kann, während, wenn möglich, in der deklarativen Syntax bleiben.
base = declarative_base()
class O1(base):
__tablename__ = 'O1'
value = Column(Integer)
o2_id = Column(Integer, ForeignKey('O1.id')) # The culprit
class O2(base):
__tablename__ = 'O2'
id = Column(Integer, primary_key=True)
ones = relation('O1', order_by = ['O1.value'])
Session.query(O2).options(eagerload('ones')).all() # Throws an error
Danke. Beide Lösungen funktionieren. Ich werde den zweiten benutzen. Ein Zusatz, weil es mehrdeutig ist: Wenn Sie Strings verwenden, müssen Sie die Mapper-Namen verwenden. Das 'O1' im zweiten Beispiel bezieht sich eigentlich auf die Klasse, nicht den Tabellennamen. – ebo