Python SQLAlchemy无法在查询中将func.biger用作func

Python SQLAlchemy无法在查询中将func.biger用作func,python,mysql,sqlalchemy,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.i

来描述我的问题。您可以看到以下原始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中描述>时。它失败了:

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在mysql不支持的情况下向greater解释我的sql。那么,我怎样才能用像greatera,b这样的东西来得到我的答案a>b呢

可能是简单的sql从测试中选择a>b也可以描述问题。以上是我的原始需求。因此,问题可以改变:

如何使用SQLAIchemy orm实现从测试中选择a>b

SQLAlchemy为您提供了帮助,所以就这么做吧

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()

这一点很有效,因为创建的也是一个,因此也有。

谢谢。这就是我要找的。它返回True或False,而不是mysql的1或0,这没关系。我可以稍后转换。不完全确定你所说的返回真或假,而不是。。。。整个函数日期差异…>7将生成一个新的SQL二进制表达式对象,该对象将作为查询的一部分,并在DB.somthing中进行计算,例如[True、、True、、True、]而不是[1、、1、…]啊。是的,SQLA认为比较结果应该是布尔值,因此它将为您转换DB的结果。