1
Учитывая эти отношения:Используя вложенное значение для отношений SQLAlchemy order_by
A.children = [B...]
B.type = C
C.order = int
Как я могу определить порядок .children
отношения к порядку B.type.order
?
class A(Base):
id = Column(Integer, primary_key=True)
children = relationship(lambda: B, order_by=lambda: B.type.order)
# ^^^^^^^^^^^^^^^^^^^^
# this doesn't work
class B(Base):
C_id = Column(Integer, ForeignKey(C.id), primary_key=True)
A_id = Column(Integer, ForeignKey(A.id), primary_key=True)
type = relationship(lambda: C)
class C(Base):
id = Column(Integer, primary_key=True)
order = Column(Integer)
дает мне:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with
B.type
has an attribute 'order'
[Это] (http://stackoverflow.com/q/9861990/102441) кажется релевантно, но я не уверен, как вписаться в 'order_by' kwarg – Eric
. Ваш' B.type' - это отношения, у него нет атрибута заказа. Order_by необходимо разрешить для столбца таблицы ** B **. То, что вы пытаетесь сделать, - это даже не столбец B, но для таблицы C требуется JOIN, и я не думаю, что это можно сделать. Возможно, посмотрите на это http://docs.sqlalchemy.org/en/latest/orm/mapper_config.html#using-column-property. – dtheodor
Другим обходным путем было бы объявить ваши отношения как «lazy =» dynamic », а затем сделать' a.children.join (C) .order_by (C.order) .all() ' – dtheodor