小编典典

flake8抱怨filter子句中的布尔比较“ ==”

mysql

我在mysql db表中有一个布尔字段。

# 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的比较应为“如果cond为False:”或“如果非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”。有人可以告诉我如何处理这种情况。我不想禁用薄片。


阅读 263

收藏
2020-05-17

共1个答案

小编典典

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

# noqa在该行中添加评论并完成操作。

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

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

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

2020-05-17