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>< ;/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!