Ответ 1
PEP8 не должен следовать за буквой.
Рекомендуется использовать is None
вместо == None
, потому что is
не может быть перегружен (в отличие от ==
):
>>> class Bad(object):
... def __eq__(self, other):
... return True
...
>>> instance = Bad()
>>> instance == None
True
>>> instance is None
False
В вашем случае вы хотите использовать перегруженный оператор ==
, поэтому предупреждение неверно.
Существует три способа предупреждения:
-
Вы можете отключить это конкретное предупреждение для этой отдельной строки:
-
Для Flake8/PyFlakes:
session.query(MyModel).filter(MyModel.my_column != None).all() # noqa: E711
-
Для Pylint:
session.query(MyModel).filter(MyModel.my_column != None).all() # pylint: disable=singleton-comparison
-
-
Вы можете избежать использования оператора равенства, напрямую вызвав методы класса
__eq__
(для==
) и__ne__
(для!=
):session.query(MyModel).filter(MyModel.my_column.__ne__(None)).all()
-
Вы можете использовать
.is_
и.isnot
:session.query(MyModel).filter(MyModel.my_column.isnot(None)).all()
Обратите внимание, что
.is_
и.isnot
не совпадают с==
и!=
.MyModel.my_column != x
может означать какIS NOT NULL
, так и!= x
в зависимости от значенияx
и вашей базы данных, поэтому решения 1 и 2, вероятно, лучше, если вы действительно не любите использовать методы__
и знаете тип правой части вашего выражения.