flake8 在过滤子句中标记布尔比较
当尝试基于 SQL 中的布尔比较来过滤查询结果时,开发人员可能会遇到以下警告: flake8 关于“==”的使用。虽然通常建议在其他地方使用“if cond is False:”或“if not cond:”进行布尔比较,但这不适用于 SQLAlchemy 中的过滤子句。
在提供的示例中,布尔字段数据库表中的 (obsoleted) 用于确定非废弃测试用例的计数。代码在过滤子句中使用 TestCase.obsoleted == False。
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()<br>< ;/pre><p>但是,flake8 报告警告“E712:与 False 的比较应该是 'if cond is False:' 或 'if not cond:'。”</p><p>要解决此警告,开发人员可能会尝试更改代码以使用“is False”或“is not”运算符:</p><p></p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase).filter(TestCase.obsoleted is False)。 count()<br>
或
caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()<br>
不幸的是,这些修改会导致不正确的结果,返回 0 而不是预期的计数。这是因为 SQLAlchemy 中的过滤子句不支持“is”或“is not”运算符。
要在不禁用 flake8 的情况下解决此问题,开发人员可以在有问题的行上使用 # noqa 注释:
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False) # noqa: E712<br>
或者,sqlalchemy.sql.expression .false 函数可以使用:
from sqlalchemy.sql.expression import false<p>caseNum = session.query(TestCase).filter(TestCase.obsoleted == false() )<br>
其中 false() 返回所使用的 SQL 方言的适当值。
以上是为什么'flake8”在 SQLAlchemy 过滤子句中标记布尔比较?的详细内容。更多信息请关注PHP中文网其他相关文章!