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