python - query - sqlalchemy postgresql



Выражение IS NOT NULL без возникновения ошибки PEP8 (1)

PEP8 не предназначен для письма.

Вам рекомендуется использовать is None вместо == None потому что is может быть перегружен (в отличие от == ):

>>> class Bad(object):
...     def __eq__(self, other):
...         return True
...
>>> instance = Bad()
>>> instance == None
True
>>> instance is None
False

В вашем случае вы хотите использовать перегруженный == оператор, поэтому предупреждение неверно.

Существует три способа предупреждения:

  1. Вы можете отключить это конкретное предупреждение для этой отдельной строки:

    • Для Flake8 / PyFlakes:

      session.query(MyModel).filter(MyModel.my_column != None).all()  # noqa: E222
    • Для Пилинта:

      session.query(MyModel).filter(MyModel.my_column != None).all()  # pylint: disable=singleton-comparison
  2. Вы можете избежать использования оператора равенства, напрямую вызвав __eq__ класса __eq__ (для == ) и __ne__ (for != ) __ne__ :

    session.query(MyModel).filter(MyModel.my_column.__ne__(None)).all()
  3. Вы можете использовать .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, вероятно, лучше, если вы действительно не любите использовать __ методы и знаете тип правая сторона вашего выражения.

https://src-bin.com

В какой-то момент моего проекта мне нужно запросить объект SQLAlchemy для столбцов, которые не являются NULL. В моем коде я делаю:

session.query(MyModel).filter(MyModel.my_column != None).all()

... и он отлично работает. Проблема в том, что всякий раз, когда я запускаю pep8 или один из других линтов в файле, возникает ошибка E711: сравнение с None должно быть, if cond is not None: Я согласен с духом этого руководства, и поэтому я не хочу замолчать предупреждение только из-за одной маленькой линии.

Есть ли другой способ написать это? Предпочтительно, где нам не нужно копаться в модуле func ?





pep8