2015-07-09 2 views
1

Я использую декларативный аромат SQL Alchemy с базой данных PostgreSQL. У меня есть ClaimAccount, который управляет объектами Claim. Что-то вроде:Пользовательские коллекции в SQL Alchemy

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, но, вероятно, было бы лучше (яснее, быстрее, DRYer, более удобно), если Postgres сделал это для меня.

Сначала я подумал, что ответ должен был установить collection_class на связь с некоторыми PriorityQueue или SortedList или что-то еще, но теперь я думаю, что это повлияет только на то, как претензии вставляются в структуры данных Python, а не как они извлекаются из базы данных. Кроме того, в документации говорится, что «в большинстве случаев вам не нужна реализация пользовательской коллекции» (однако, упомянутые там случаи не содержат мой, похоже).

Есть ли у вас какие-либо советы о том, как лучше всего это сделать?

+0

Вы можете заказать запрос по любому полю. См. Соответствующий вопрос: http://stackoverflow.com/questions/4186062/sqlalchemy-order-by-descending –

ответ

1

Вы можете задать аргумент order_by. Поскольку порядок применяется к backref, вы можете сделать это следующим образом:

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

Смотрите также Ordering List extension.

Смежные вопросы