«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Why is `flake8` Flagging Boolean Comparisons in SQLAlchemy Filter Clauses?

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

Опубликовано в 2025-04-22
Просматривать:493

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

flake8 Flagging Boolean Comparison in Filter Clause

When attempting to filter query results based on a boolean comparison in SQL, developers may encounter warnings from flake8 regarding the use of "==". While it's generally recommended to use "if cond is False:" or "if not cond:" for boolean comparisons elsewhere, this doesn't apply to filter clauses in SQLAlchemy.

In the example provided, a boolean field (obsoleted) in a database table is used to determine the count of non-obsoleted test cases. The code uses TestCase.obsoleted == False in the filter clause.

<pre>caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()
</pre>

However, flake8 reports the warning "E712: Comparison to False should be 'if cond is False:' or 'if not cond:'."

To address this warning, developers may be tempted to change the code to use "is False" or "is not" operators:

<pre>caseNum = session.query(TestCase).filter(TestCase.obsoleted is False).count()
</pre>

or

<pre>caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()
</pre>

Unfortunately, these modifications result in incorrect results, returning 0 instead of the expected count. This is because filter clauses in SQLAlchemy do not support "is" or "is not" operators.

To resolve this issue without disabling flake8, developers can use a # noqa comment on the offending line:

<pre>caseNum = session.query(TestCase).filter(TestCase.obsoleted == False) # noqa: E712
</pre>

Alternatively, the sqlalchemy.sql.expression.false function can be used:

<pre>from sqlalchemy.sql.expression import false

caseNum = session.query(TestCase).filter(TestCase.obsoleted == false())
</pre>

where false() returns the appropriate value for the SQL dialect in use.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3