Voici le modèle:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Je veux filtrer entre deux dates, par exemple pour choisir tous les utilisateurs dans l'intervalle 18-30 ans.
Comment l'implémenter avec SQLAlchemy?
Je pense à:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Je sais que ce n'est pas correct, mais comment faire le correct?
'1985-01-17'
, vous pouvez également utiliserdatetime.date(1985, 1, 17)
- peut être plus facile à obtenir ou à travailler dans certains environnements.il est égal à:
Wish peut vous aider.
la source
si vous voulez obtenir toute la période:
Cela signifie que vont: 1985-01-17 00:00 - 17/01/1988 23:59
la source
func.date
ne fait CAST sur la colonne qui supprime le temps de l' équation => cela ne pas plage moyenne avec le temps! Cela ne fonctionne que lorsque l'heure n'est PAS dans la colonne - vous devez le CAST à Date comme ceci, ou créer la colonne Date, une fois que c'est DateHeure ou horodatage - il se termine généralement par 00:00 (MySQL et PostgreSQL le font). Une solution plus générique n'est pas de lancer, mais de définir la date à laquelle vous envoyez .endOfDay () afin que vous l'envoyiez réellement1988-01-17 23:59:59
à la base de données comparez :)