使用嵌套值为SQLAlchemy关系排序

1 投票
1 回答
1192 浏览
提问于 2025-04-20 18:42

根据这些关系:

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: 与B.type相关的'InstrumentedAttribute'对象或'Comparator'对象都没有'order'这个属性

1 个回答

0

这看起来应该是可以工作的:

class A(Base):
    id       = Column(Integer, primary_key=True)
    children = relationship(lambda: B, order_by=lambda: B._order)

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)
    _order = column_property(select([C.order]).where(C.id == C_id))

class C(Base):
    id       = Column(Integer, primary_key=True)
    order    = Column(Integer)

撰写回答