Une rame de métro vide

Vérifier None dans une requête SQLAlchemy

Voici un petit conseil pour tous ceux qui apprennent à utiliser SQLAlchemy.

Vérifier pour None a lieu assez souvent pour que vous ayez besoin de connaître cette petite astuce.

Le SQL

L’objectif est de générer cette requête SQL à partir de SQLAlchemy :

1
2
SELECT * FROM event
WHERE confirmed_at IS NULL

Pas comment l’écrire

Vous ne devriez pas déclarer votre requête SQLAlchemy comme suit :

1
2
3
query = session.query(EventEntity).filter(
    EventEntity.confirmed_at is None,
)

Cela semble naturel si vous avez déjà écrit du code Python, mais cela ne fonctionnera pas.

Syntaxe correcte

À la place, utilisez SQLAlchemy comme ceci, en utilisant l’opérateur == :

1
2
3
query = session.query(EventEntity).filter(
    EventEntity.confirmed_at == None,
)

Pourquoi

Parce que SQLAlchemy utilise des méthodes magiques (ou surcharges d’opérateur) pour créer les constructions SQL, il ne peut gérer que des opérateurs tels que != ou ==, et il n’est pas capable de travailler avec is (qui est une construction Python tout à fait valide).

Source : Stackoverflow

Suivez-moi !

Merci d’avoir lu cet article. Assurez-vous de me suivre sur X, de vous abonner à ma publication Substack et d’ajouter mon blog à vos favoris pour ne pas manquer les prochains articles.

Photo de Pixabay