ホームページ  >  記事  >  データベース  >  SQLAlchemy フィルター句で `flake8` がブール比較にフラグを立てるのはなぜですか?

SQLAlchemy フィルター句で `flake8` がブール比較にフラグを立てるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 00:55:03122ブラウズ

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

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>&lt ;/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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。