当前位置: 首页 > 面试题库 >

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

太叔航
2023-03-14
问题内容

我在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实际上有意义的少数几个位置之一。 在其他地方 ,你应该 使用它。

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

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

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

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



 类似资料:
  • Java 7更改了排序算法,从而抛出 java.lang.IllegalArgumentException:“比较方法违反了其总合同!” 在某些情况下,当使用的比较器有故障时。是否可以确定比较器中的哪种错误导致了这种情况?在我的实验中,如果x!=x,如果x也没有关系 (如果有一个通用的规则,在比较器中寻找bug可能会更容易。但是当然最好是修复所有的bug。:-) ) 特别是,以下两个比较器没有让T

  • 我一直在尝试以多种不同的方式在windows上构建fltk,但最终我总是得到: 配置:错误:C编译器无法创建可执行文件(msys fltk/配置) 或 检查C编译器是否正常工作:C:/MinGW/bin/gcc.exe--已损坏(CMake-gui) 我用fltk 1.3.0和1.3.3试用过它,我甚至用过三个不同的MinGW发行版,GCC版本:。但它无法编译。以下是由生成的一些错误日志/配置文件

  • 版本: Datastax Java driver 3.1.4, Cassandra 3.10 请考虑下表: 和一个映射类: 为此类创建映射器后(是mykeyspace上会话的) 在呼叫时 我明白了 查询准备失败:INSERT INTO mykey space . object _ ta(objid,objid,version_date,objecttype)值(?,?,?,?);:com . da

  • 问题内容: 我尝试在Ubuntu 12.04上安装Pycharm,并且得到以下信息: 正常工作该怎么办? 问题答案: 由于Oracle设置的限制,大多数较新的发行版不再包含Oracle(Sun)JDK。相反,它们与OpenSDK一起提供。尽管OpenSDK适用于大多数应用程序,但PyCharm似乎存在一些问题。 您必须手动安装Oracle(Sun)JDK,并确保它是默认JDK或在启动PyCharm

  • 为什么与有不同的 ? 我正在使用Drools DSL,我必须实现一个规则: 我有这些DSL定义: 要求是以肯定的方式编写可重用的DSL语句,并具有否定它们的能力。

  • 今天我得到了一个关于代码的评论,考虑到我在学校作业中检查变量是真还是假的方式。 我编写的代码如下所示: 他们说这样写更好/更整洁: 例如,0和1不应该在该变量中。