2015-11-03 2 views
2

Я пытаюсь выяснить, как сделать что-то вроде ответа на this question, но с помощью SQLAlchemy.Сравните разницу между двумя столбцами в SQLAlchemy ORM

Нелегко найти, как упорядочить результаты запроса по разнице между двумя столбцами, не прибегая к необработанному SQL.

Любая помощь очень ценится !!

Также, из любопытства, можно ли создать столбец, который автоматически вычисляет разницу между двумя другими столбцами? Например, у вас будет столбец доходов и убытков, а затем столбец прибыли, который автоматически объединяет их.

ответ

0
session.query((Table.revenue - Table.loss).label('profit')).order_by('profit desc').all() 

Для автоматического расчета колонки можно использовать events

from sqlalchemy import event 

class Table(Model): 
    id = Column(Integer, primary_key=True) 
    revenue = Column(Integer) 
    loss = Column(Integer) 
    profit = Column(Integer) 

@event.listens_for(Table.revenue, 'set') 
def revenue_listener(target, value, oldvalue, initiator): 
    # update profit when revenue change 
    target.profit = value - (target.loss or 0) 

@event.listens_for(Table.loss, 'set') 
def loss_listener(target, value, oldvalue, initiator): 
    # update profit when loss change 
    target.profit = (target.revenue or 0) - value 
+0

Удивительного спасибо! –

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