web-dev-qa-db-fra.com

Quelle est la différence entre .one () et .first ()

Quelle est la différence entre les méthodes one et first dans SQLAlchemy

26
Reena Shirale

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]
46
Martijn Pieters