web-dev-qa-db-ja.com

フィルター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())型ではない列を使用しようとすると、代わりにfilterステートメントを正しく使用しません。

Column(String(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_であってはならないことを意味します。

明らかな何かが欠けていますか?助けていただければ幸いです。

32
user1431282

<から>過去10週間以内にすべての科目を取得できます。

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句を生成します。この句はincludes結果が句に一致します。したがって、結果は「除外」されませんが、含まれます。

53
Ian Wilson