Maison >base de données >tutoriel mysql >Comment filtrer correctement les champs de date SQLAlchemy pour les requêtes par tranche d'âge ?

Comment filtrer correctement les champs de date SQLAlchemy pour les requêtes par tranche d'âge ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 04:09:10862parcourir

How to Correctly Filter SQLAlchemy Date Fields for Age Range Queries?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn