SQLAlchemy : Filtrage des champs de date
Dans SQLAlchemy, le filtrage basé sur les champs de date nécessite un examen attentif. Explorons comment filtrer correctement entre deux dates pour extraire des données dans une tranche d'âge spécifiée.
Modélisation du champ de date
En supposant que vous disposez d'un modèle utilisateur avec un champ d'anniversaire défini comme type de données Date, il est représenté dans la base de données sous la forme d'une chaîne au format « AAAA-MM-JJ », par exemple : '1987-01-17'.
Filtrage par tranche d'âge
Pour sélectionner tous les utilisateurs dans une tranche d'âge spécifique, disons 18 à 30 ans, nous devons comparez leurs anniversaires aux dates correspondantes qui représentent le début et la fin de cette plage.
Incorrect Approche
Votre requête initiale, bien que conceptuellement correcte, contient une faute de frappe qui inverse les symboles d'inégalité :
query = DBSession.query(User).filter( and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17') )
Cette requête exclut tous les enregistrements car elle recherche les utilisateurs dont les anniversaires sont tous les deux supérieur ou égal à « 1988-01-17 » et inférieur ou égal à « 1985-01-17 », qui est impossible.
Approche correcte
Pour filtrer correctement, inversez simplement les symboles d'inégalité :
qry = DBSession.query(User).filter( and_(User.birthday <= '1988-01-17', User.birthday >= '1985-01-17') )
Vous pouvez également utiliser le module intégré Méthode between() :
qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))
Les deux approches renverront les utilisateurs dont les anniversaires se situent dans la plage de dates spécifiée, représentant l'âge souhaité intervalle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!