给出一个表
class Order(db.Model):
created_at = db.Column(db.DateTime)
days = db.Column(db.Integer)
我需要使用FROM语句组成一个查询:Order.created_at + Order.days < datetime.now()
。最简单的方法不起作用,因为将整数加到datetime的结果是双倍的:)这个结论是我在用MySQL实际实验后做的。
稍微搜索一下后,我发现了正确的MySQL SQL语句,它解决了所描述的问题:
SELECT *
FROM orders o
WHERE o.created_at + INTERVAL o.days DAY < '2014-06-10 14:22:00';
我想问的是如何编写上面的sqlalchemy过滤器查询?
我发现了一篇文章how to use Intervals here on stackoverflow,但MySQL中缺少DATEADD
,我不知道我需要绑定一个Interval。
抱歉我的英语不好,我希望我能正确解释我的问题:)
UPD:将days
定义为Interval可能是正确的,但目前它不是一个选项。
答案 0 :(得分:2)
MySQL有一个名为TIMESTAMPADD的函数,它似乎可以做你想要的。以下是在查询中使用它的方法。
session.query(Order).filter(func.timestampadd(text('DAY'), Order.days, Order.created_at) < datetime(2014, 6, 10, 14, 22))
答案 1 :(得分:1)
from sqlalchemy import select, func
query = (session.query(Orders).filter(
func.DATEADD('day', Orders.days, Orders.created_at) == '2014-06-10 14:22:00'))