flake8 Flagging Boolean Comparison in Filter Clause
SQL でのブール比較に基づいてクエリ結果をフィルタリングしようとすると、開発者は次の警告が表示される場合があります。 「==」の使用についてはflake8。一般に、他の場所でのブール比較には「if cond is False:」または「if not cond:」を使用することが推奨されますが、これは SQLAlchemy のフィルター句には適用されません。
提供された例では、ブール型フィールドデータベース テーブル内の (廃止) は、廃止されていないテスト ケースの数を決定するために使用されます。このコードでは、filter 句で TestCase.obsoleted == False を使用しています。
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()<br>< ;/pre></p> <p>ただし、flake8 は警告「E712: False との比較は 'if cond is False:' または 'if not cond:' である必要があります。」</p> <p>この警告に対処するには開発者は、「is False」または「is not」演算子を使用するようにコードを変更したくなるかもしれません:</p> <p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase).filter(TestCase.obsoleted is False)。 count()<br>
or
caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()<br>
残念ながら、これらの変更により不正確な結果が生じ、期待されるカウントではなく 0 が返されます。これは、SQLAlchemy のフィルター句が「is」または「is not」演算子をサポートしていないためです。
flake8 を無効にせずにこの問題を解決するには、開発者は問題のある行に # noqa コメントを使用できます。
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False) # noqa: E712<br>
または、sqlalchemy.sql.expression .false 関数を使用できます:
from sqlalchemy.sql.expression import false</p> <p>caseNum = session.query(TestCase).filter(TestCase.obsoleted == false() )<br>
ここで false() は、使用中の SQL ダイアレクトに適切な値を返します。
以上がSQLAlchemy フィルター句で `flake8` がブール比較にフラグを立てるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。