我在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”。有人可以告诉我如何处理这种情况。我不想禁用薄片。
那是因为SQLAlchemy过滤器是== False实际上有意义的少数几个位置之一。 在其他地方 ,你应该 不 使用它。
== False
# noqa在该行中添加评论并完成操作。
# noqa
或者您可以使用sqlalchemy.sql.expression.false:
sqlalchemy.sql.expression.false
from sqlalchemy.sql.expression import false TestCase.obsoleted == false()
其中false(),为您的会话SQL方言返回正确的值。有一个匹配项sqlalchemy.expression.true。
false()
sqlalchemy.expression.true