SQLAlchemy:将Integer列添加到DateTime

时间:2014-06-10 15:02:37

标签: python sqlalchemy

给出一个表

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可能是正确的,但目前它不是一个选项。

2 个答案:

答案 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'))