我对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
。
我错过了一些明显的东西吗?任何帮助将不胜感激。
答案 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
子句,包含与该子句匹配的结果。所以结果不是“过滤掉”,而是包括在内。