python – flake8抱怨过滤子句中的布尔比较“==”

我在mysql数据库表中有一个布尔字段。

# 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: Comparison to False should be “if cond is False:” or “if not
cond:”

好的,我觉得有道理所以我的代码改为:

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

要么

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

但他们都不能工作。结果总是为0。
我认为filter子句不支持运算符“is”或“not not”。有人可以告诉我如何处理这种情况。我不想禁用该片。

那是因为SQLAlchemy过滤器是== False实际上有意义的几个地方之一。其他地方你不应该使用它。

添加一个#noqa注释到该行,并完成它。

或者你可以使用sqlalchemy.sql.expression.false

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

其中,false()返回会话SQL方言的正确值。有一个匹配的sqlalchemy.expression.true

http://stackoverflow.com/questions/18998010/flake8-complains-on-boolean-comparison-in-filter-clause

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – flake8抱怨过滤子句中的布尔比较“==”