首页  >  文章  >  数据库  >  为什么“flake8”在 SQLAlchemy 过滤子句中标记布尔比较?

为什么“flake8”在 SQLAlchemy 过滤子句中标记布尔比较?

Barbara Streisand
Barbara Streisand原创
2024-10-27 00:55:03122浏览

Why is `flake8` Flagging Boolean Comparisons in SQLAlchemy Filter Clauses?

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>&lt ;/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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn