Hier ist Modell:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Ich möchte zwischen zwei Daten filtern, um beispielsweise alle Benutzer im Intervall von 18 bis 30 Jahren auszuwählen.
Wie implementiere ich es mit SQLAlchemy?
Ich denke an:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Ich weiß, dass dies nicht korrekt ist, aber wie kann ich es richtig machen?
'1985-01-17'
auch verwendendatetime.date(1985, 1, 17)
- in einigen Umgebungen ist es möglicherweise einfacher, darauf zuzugreifen oder damit zu arbeiten.es ist gleich:
Wunsch kann Ihnen helfen.
quelle
Wenn Sie den gesamten Zeitraum erhalten möchten :
Das bedeutet Bereich: 1985-01-17 00:00 - 1988-01-17 23:59
quelle
func.date
tut CAST auf der Säule , die aus der Gleichung der Zeit entfernt => das bedeutet NICHT mittleren Bereich mit der Zeit! Dies funktioniert nur, wenn sich die Zeit NICHT in der Spalte befindet - Sie müssen sie wie folgt auf Datum umwandeln oder die Spalte auf Datum setzen, sobald es sich um DateTime oder Zeitstempel handelt - sie wird normalerweise mit 00:00 beendet (sowohl MySQL als auch PostgreSQL tun dies). Eine allgemeinere Lösung besteht nicht darin, sie zu übertragen, sondern das Datum festzulegen,1988-01-17 23:59:59
an das Sie sie senden .endOfDay (), damit Sie sie tatsächlich an die Datenbank senden. Vergleich :)