Вот модель:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Я хочу фильтровать между двумя датами, например, чтобы выбрать всех пользователей в интервале 18-30 лет.
Как реализовать это с помощью SQLAlchemy?
Я думаю о:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Я знаю, что это неправильно, но как правильно?
'1985-01-17'
вы также можете использоватьdatetime.date(1985, 1, 17)
- может быть проще получить или работать в некоторых средах.он равен:
желание может помочь вам.
источник
если хотите получить весь период:
Это означает диапазон: 1985-01-17 00:00 - 1988-01-17 23:59
источник
func.date
делает CAST CAST в столбце, который удаляет время из уравнения => это НЕ означает диапазон со временем! Это работает только тогда, когда время НЕ указано в столбце - вы должны CAST его на Date, как это, или сделать столбец Date, если это DateTime или временная метка - обычно это заканчивается 00:00 (как MySQL, так и PostgreSQL делают это). Более общее решение - не использовать, а установить дату, которую вы отправляете ему .endOfDay (), чтобы вы фактически отправляли1988-01-17 23:59:59
в базу данных сравнения :)