Maison > base de données > tutoriel mysql > Pourquoi « flake8 » signale-t-il les comparaisons booléennes dans les clauses de filtre SQLAlchemy ?

Pourquoi « flake8 » signale-t-il les comparaisons booléennes dans les clauses de filtre SQLAlchemy ?

Barbara Streisand
Libérer: 2024-10-27 00:55:03
original
210 Les gens l'ont consulté

Why is `flake8` Flagging Boolean Comparisons in SQLAlchemy Filter Clauses?

flake8 signalant une comparaison booléenne dans la clause de filtre

Lorsqu'ils tentent de filtrer les résultats d'une requête en fonction d'une comparaison booléenne dans SQL, les développeurs peuvent rencontrer des avertissements de flake8 concernant l'utilisation de "==". Bien qu'il soit généralement recommandé d'utiliser « if cond is False : » ou « if not cond : » pour les comparaisons booléennes ailleurs, cela ne s'applique pas aux clauses de filtre dans SQLAlchemy.

Dans l'exemple fourni, un champ booléen (obsolète) dans une table de base de données est utilisé pour déterminer le nombre de cas de test non obsolètes. Le code utilise TestCase.obsoleted == False dans la clause de filtre.

caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()<br>&lt ;/pre></p>
<p>Cependant, flake8 signale l'avertissement « E712 : La comparaison avec False devrait être 'if cond is False :' ou 'if not cond:'."</p>
<p>Pour répondre à cet avertissement , les développeurs peuvent être tentés de modifier le code pour utiliser les opérateurs « est faux » ou « n'est pas » :</p>
<p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase).filter(TestCase.obsoleted is False). count()<br>

ou

caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()<br>

Malheureusement, ces modifications entraînent des résultats incorrects, renvoyant 0 au lieu du nombre attendu. En effet, les clauses de filtre dans SQLAlchemy ne prennent pas en charge les opérateurs « est » ou « n'est pas ».

Pour résoudre ce problème sans désactiver flake8, les développeurs peuvent utiliser un commentaire #noqa sur la ligne incriminée :

caseNum = session.query(TestCase).filter(TestCase.obsoleted == False) # noqa: E712<br>

Alternativement, l'expression sqlalchemy.sql. La fonction .false peut être utilisée :

from sqlalchemy.sql.expression import false</p>
<p>caseNum = session.query(TestCase).filter(TestCase.obsoleted == false() )<br>

où false() renvoie la valeur appropriée pour le dialecte SQL utilisé.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal