1. ホーム
  2. python

[解決済み] flake8 が filter 節のブール値比較 "==" で文句を言う

2023-03-12 16:49:31

質問

mysqlのdbテーブルにbooleanフィールドがあります。

# table model
class TestCase(Base):
    __tablename__ = 'test_cases'
    ...
    obsoleted = Column('obsoleted',  Boolean)

削除されていないテストケースの数を取得するには、次のように簡単に行うことができます。

caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()
print(caseNum)

これで問題なく動作するのですが、flake8では以下のような警告が報告されます。

E712: Falseとの比較は、"if cond is False:"または "ifでなければなりません。 cond:"でなければなりません。

なるほど、それなら納得です。では、私のコードを次のように変更してください。

caseNum = session.query(TestCase).filter(TestCase.obsoleted is False).count()

または

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

しかし、どちらもうまくいきません。 結果は常に0です。 filter節が演算子"is"または"is not"をサポートしていないのだと思います。誰かこの状況を処理する方法を教えてください。私はflakeを無効にしたくありません。

どのように解決するのですか?

それは、SQLAlchemy のフィルタが、数少ない == False が実際に意味を持つ数少ない場所だからです。 他のすべての場所 にする必要があります。 ではなく を使用する必要があります。

を追加します。 # noqa のコメントを追加して終了です。

あるいは sqlalchemy.sql.expression.false :

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

ここで false() はセッションSQLの方言に合った値を返します。一致する sqlalchemy.expression.true .