在Filter SQLAlchemy中进行DateTime比较

时间:2013-07-25 21:06:23

标签: python sql sqlalchemy

我对SQLAlchemy中的过滤感到有点困惑。

我目前正在尝试过滤超过10周的条目,所以我有

current_time = datetime.datetime.utcnow()

potential = session.query(Subject).filter(Subject.time < current_time - datetime.timedelta(weeks=10))

但是,potential.count()始终返回0

我的理论是我没有正确使用过滤器语句,因为当我尝试使用的列不是Column(DateTime())类型的列而是

  

柱(字符串(250))

 potential = session.query(Subject).filter(Subject.string_field < current_time - datetime.timedelta(weeks=10))

SQLAlchemy仍然不会抱怨。

另外,当我用

进行手动检查时
curr_time - session.query(Subject).first().time > datetime.timedelta(weeks=10)

我得到True,这意味着计数不应该是0

我错过了一些明显的东西吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:49)

如果您将<切换为>,您可以在过去十周内获得所有科目:

current_time = datetime.datetime.utcnow()

ten_weeks_ago = current_time - datetime.timedelta(weeks=10)

subjects_within_the_last_ten_weeks = session.query(Subject).filter(
    Subject.time > ten_weeks_ago).all()

过滤器生成WHERE子句,包含与该子句匹配的结果。所以结果不是“过滤掉”,而是包括在内。