Подтвердить что ты не робот

Выполнение сопоставлений DateTime в фильтрах 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.

Я пропустил что-то очевидное? Любая помощь будет оценена.

4b9b3361

Ответ 1

Если вы переключите < на >, вы сможете получить все предметы за последние десять недель:

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, которое включает в себя результаты, соответствующие этому предложению. Таким образом, результаты не "отфильтровываются", а включаются.