48

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

明らかな何かが欠けていますか?どんな助けでも大歓迎です。

4

1 に答える 1

84

<を aに切り替えると>、過去 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()

Filter は、句に一致する結果を含むWHERE句を生成します。したがって、結果は「除外」されませんが、含まれます。

于 2013-07-26T07:11:54.183 に答える