我在mysql db表中有一个布尔字段.
# table model
class TestCase(Base):
__tablename__ = 'test_cases'
...
obsoleted = Column('obsoleted', Boolean)
Run Code Online (Sandbox Code Playgroud)
要获得所有未经过时的测试用例的计数,可以像这样完成:
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()
print(caseNum)
Run Code Online (Sandbox Code Playgroud)
这很好,但是flake8报告了以下警告:
E712:与False的比较应该是"如果cond是假的:"或"如果不是cond:"
好的,我觉得这很有道理.所以将我的代码更改为:
caseNum = session.query(TestCase).filter(TestCase.obsoleted is False).count()
Run Code Online (Sandbox Code Playgroud)
要么
caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()
Run Code Online (Sandbox Code Playgroud)
但他们都不能奏效.结果始终为0.我认为filter子句不支持运算符"is"或"is not".有人可以告诉我如何处理这种情况.我不想禁用片状.
这是我的(PostgreSQL)表 -
test=> create table people (name varchar primary key,
marriage_status varchar) ;
test=> insert into people values ('Ken', 'married');
test=> insert into people values ('May', 'single');
test=> insert into people values ('Joe', NULL);
Run Code Online (Sandbox Code Playgroud)
我想选择被所有的人不知道要结婚了,即包括那些NULL marriage_status.
这并不能正常工作-
test=> select * from people where marriage_status != 'married' ;
name | marriage_status
------+-----------------
May | single
(1 row)
Run Code Online (Sandbox Code Playgroud)
当然这样做 -
test=> select * from people where marriage_status != 'married'
or marriage_status is NULL ;
name | marriage_status
------+----------------- …Run Code Online (Sandbox Code Playgroud) 我有一个通过SQLAlchemy创建的数据库"新闻":
class News(Base):
__tablename__ = "news"
id = Column(Integer, primary_key = True)
title = Column(String)
author = Column(String)
url = Column(String)
comments = Column(Integer)
points = Column(Integer)
label = Column(String)
Run Code Online (Sandbox Code Playgroud)
我还有一个函数News,它获取一个字符串并返回3个字符串变体之一:'good','maybe'或'never'.我尝试过滤行:
rows = s.query(News).filter(News.label == None and f(News.title) == 'good').all()
Run Code Online (Sandbox Code Playgroud)
但是程序失败了,引发了这个错误:
raise TypeError("Boolean value of this clause is not defined")
Run Code Online (Sandbox Code Playgroud)
我该如何解决?