Maison  >  Article  >  base de données  >  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
Barbara Streisandoriginal
2024-10-27 00:55:03122parcourir

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!

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