我在PostgreSQL数据库中使用了SQL Alchemy的声明式风格。我有一个管理ClaimAccount
对象的Claim
。就像是:
class Claim(MyBase):
manager_id = Column(UUID, ForeignKey(ClaimAccount.id))
manager = relationship(ClaimAccount, backref='claims')
created = Column(DATE)
现在,如果
a
是ClaimAccount
,则a.claims
是Claim
的列表。很好,但是我希望按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/