Quelle est la différence entre les méthodes one
et first
dans SQLAlchemy
Query.one()
nécessite qu'il n'y ait que un résultat dans le jeu de résultats; c'est une erreur si la base de données renvoie 0 ou 2 résultats ou plus et une exception sera déclenchée.
Query.first()
renvoie le premier d'un jeu de résultats potentiellement plus grand (en ajoutant LIMIT 1
à la requête), ou None
s'il n'y a pas de résultats. Aucune exception ne sera levée.
Dans la documentation de Query.one()
:
Retourne exactement un résultat ou déclenche une exception.
et de Query.first()
:
Renvoie le premier résultat de cette requête ou Aucun si le résultat ne contient aucune ligne.
(soulignement le mien).
En termes de liste Python, one()
serait:
def one(lst):
if not lst:
raise NoResultFound
if len(lst) > 1:
raise MultipleResultsFound
return lst[0]
tandis que first()
serait:
def first(lst):
return lst[0] if lst else None
Il existe également une méthode Query.one_or_none()
, qui déclenche une exception uniquement s'il existe plusieurs résultats pour la requête. Sinon, il retournera le résultat unique, ou None
s'il n'y a pas de résultats.
En termes de liste, ce serait l'équivalent de:
def one_or_none(lst):
if not lst:
return None
if len(lst) > 1:
raise MultipleResultsFound
return lst[0]