Oto model:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Chcę filtrować między dwiema datami, na przykład, aby wybrać wszystkich użytkowników w przedziale 18-30 lat.
Jak zaimplementować to z SQLAlchemy?
Myślę o:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Wiem, że to nie jest poprawne, ale jak to zrobić?
'1985-01-17'
możesz również użyćdatetime.date(1985, 1, 17)
- może być łatwiejszy do uzyskania lub pracy w niektórych środowiskach.jest równa:
życzenie może ci pomóc.
źródło
jeśli chcesz otrzymać cały okres:
Oznacza to zakres: 1985-01-17 00:00 - 1988-01-17 23:59
źródło
func.date
robi CAST na kolumnie, co usuwa czas z równania => to działa NIE oznacza to zakresu z czasem! Działa to tylko wtedy, gdy czas NIE jest w kolumnie - musisz CAST go na Date w ten sposób lub ustawić kolumnę Date, gdy jest to DateTime lub timestamp - zwykle kończy się na 00:00 (robią to zarówno MySQL, jak i PostgreSQL). Bardziej ogólnym rozwiązaniem nie jest przesyłanie, ale ustawienie daty wysyłania do .endOfDay (), aby faktycznie wysłać1988-01-17 23:59:59
do bazy danych porównanie :)