首页  >  文章  >  数据库  >  为什么 Flake8 反对 SQLAlchemy 过滤器中的布尔比较,以及如何修复它?

为什么 Flake8 反对 SQLAlchemy 过滤器中的布尔比较,以及如何修复它?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-26 23:27:30690浏览

 Why Does Flake8 Object to Boolean Comparisons in SQLAlchemy Filters, and How Can I Fix It?

Flake8 对过滤子句中布尔比较的反对

代码检查器经常发出警告以促进编程中的最佳实践。 flake8 的 E712 就是这样的警告之一,它在过滤子句中使用“==”来标记布尔比较。本文探讨了这个问题,并提供了在 SQLAlchemy 查询中表达布尔条件的替代方法。

Flake8 的警告

如提供的代码片段所示,flake8 针对诸如“TestCase.obsoleted ==”之类的表达式发出警告过滤子句中的“False”。根据 flake8,这些比较应该写为“if cond is False:”或“if not cond:”。

SQLAlchemy 的布尔比较处理

但是,提供的代码按预期工作尽管有警告。这是因为 SQLAlchemy 过滤器是一般规则的例外。在这种情况下,“==”是比较布尔字段的可接受方式。

过滤子句中布尔条件的替代方法

虽然“==”在 SQLAlchemy 过滤器中是可接受的,但建议使用使用符合最佳实践的替代方法。两种解决方案是:

  • 禁用 Flake8 警告:通过在有问题的行添加“# noqa”注释,可以抑制警告。
  • 使用 SQLAlchemy 的 false() 函数: SQLAlchemy 提供了一个名为“false()”的函数,该函数为会话的 SQL 方言返回适当的布尔值。您可以使用此函数创建布尔条件,例如:
from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

这种方法不仅解决了 flake8 的问题,还确保了与不同 SQL 方言的兼容性。

以上是为什么 Flake8 反对 SQLAlchemy 过滤器中的布尔比较,以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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