首页 > 数据库 > mysql教程 > 为什么'flake8”在 SQLAlchemy 过滤子句中标记布尔比较?

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

Barbara Streisand
发布: 2024-10-27 00:55:03
原创
214 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板