描述我的问题。可以看到这个原始的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
。
答案 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
。