SQLAlchemy不能在查询中使用func.bigger作为func

时间:2017-05-31 03:56:50

标签: python mysql sqlalchemy

描述我的问题。可以看到这个原始的sql:

select datediff(now(), create_time) > 7 as is_new from test order by is_new desc limit 19; 

我尝试逐步实现SQLAlchemy:

diff_days = func.datediff(today, test.create_time).label("diff_days")
session.query(diff_days).filter(test.id.in_((1,2,3,33344))).order_by(diff_days.asc()).all()   

这项工作很好。但是当我想在mysql中使用desc >时。它失败了:

is_new = func.greater(func.datediff(today, test.create_time), 7).label("is_new")
session.query(is_new).filter(test.id.in_((1,2,3,33344))).order_by(is_new.asc()).all()

我知道SQLAlchemy将我的sql解释为greater而mysql不支持。那么如何才能使用a > b

等方式获得答案greater(a, b)

可能是简单的sql select a > b from test也可以解决这个问题。虽然上面是我的起源需要。所以问题可能会改变:

如何使用SQLAIchemy orm实现select a > b from test

1 个答案:

答案 0 :(得分:1)

SQLAlchemy为您提供rich operator overloading,所以只需

is_new = (func.datediff(today, test.create_time) > 7).label("is_new")
session.query(is_new).\
    filter(test.id.in_([1, 2, 3, 33344])).\
    order_by(is_new.asc()).\
    all()

这是有效的,因为创建的Function也是ColumnElement,因此有ColumnOperators