我在PostgreSQL数据库中使用了SQL Alchemy的声明式风格。我有一个管理ClaimAccount对象的Claim。就像是:

class Claim(MyBase):
    manager_id = Column(UUID, ForeignKey(ClaimAccount.id))
    manager = relationship(ClaimAccount, backref='claims')
    created = Column(DATE)


现在,如果aClaimAccount,则a.claimsClaim的列表。很好,但是我希望按created列对其进行排序,因为我一直想按从最旧到最新的顺序遍历.claims。当然我可以用Python对其进行排序,但是如果Postgres为我做的话,可能会更好(更清晰,更快,DRYer,更方便)。

起初我以为答案是在与某些PriorityQueue或SortedList或其他任何关系的关系上设置collection_class,但是现在我认为这只会影响将声明填充到Python数据结构中的方式,而不是如何从数据库中获取声明。此外,文档还说“在大多数情况下,您不需要自定义集合实现”(但是,似乎其中提到的情况并不包括我的情况)。

您对如何最好地做到这一点有任何建议吗?

最佳答案

您可以为关系指定order_by参数。因为该订单适用于backref,所以您可以这样进行:

manager = relationship(ClaimAccount, backref=backref('claims', order_by=Claims.created.desc()))


另请参见Ordering List extension

关于python - SQL Alchemy中的自定义集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31313995/

10-10 20:59
查看更多