Подтвердить что ты не робот

Flake8 жалуется на логическое сравнение "==" в предложении фильтра

У меня есть логическое поле в таблице mysql db.

# table model
class TestCase(Base):
    __tablename__ = 'test_cases'
    ...
    obsoleted = Column('obsoleted',  Boolean)

Чтобы получить счет всех неисследованных тестовых примеров, это можно сделать так:

caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()
print(caseNum)

Это хорошо работает, но в flake8 сообщается следующее предупреждение:

E712: Сравнение с False должно быть "if cond is False:" или "if not конд:"

Хорошо, я думаю, что это имеет смысл. Так измените мой код на это:

caseNum = session.query(TestCase).filter(TestCase.obsoleted is False).count()

или

caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()

Но ни один из них не может работать. Результат всегда равен 0. Я думаю, что предложение фильтра не поддерживает оператор "есть" или "нет". Кто-нибудь скажет мне, как справиться с этой ситуацией. Я не хочу отключать чешуйку.

4b9b3361

Ответ 1

Это потому, что фильтры SQLAlchemy являются одним из немногих мест, где == False имеет смысл. В другом месте вы не должны использовать его.

Добавьте комментарий # noqa к строке и сделайте с ней.

Или вы можете использовать sqlalchemy.sql.expression.false:

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

где false() возвращает правильное значение для диалекта SQL вашего сеанса. Существует сопоставление sqlalchemy.expression.true.

Ответ 2

SQL Алхимия также имеет функции is_ и isnot, которые вы можете использовать. Пример:

Model.filter(Model.deleted.is_(False))

Подробнее об этом здесь

Ответ 3

@Jruv Используйте # noqa перед оператором, он будет игнорировать предупреждение.