tutorial query example espaƱol python sqlalchemy pep8

python - query - Expresar IS NOT NULL sin causar un error PEP8



sqlalchemy select (1)

En cierto punto de mi proyecto, necesito consultar un objeto SQLAlchemy para columnas que NO SON NULAS. En mi código, hago:

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

... y funciona genial El problema es que cada vez que ejecuto pep8 o uno de los otros linters en el archivo, aparece un error E711: la comparación con None debe ser if cond is not None: Estoy de acuerdo con el espíritu de esta guía, y como tal, no quiero silenciar la advertencia solo por una pequeña línea.

¿Hay alguna otra forma de escribir esto? ¿Preferiblemente uno donde no tenemos que profundizar en el módulo func ?


PEP8 no debe seguirse al pie de la letra.

Se recomienda utilizar is None lugar de == None porque no se puede sobrecargar (a diferencia de == ):

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

En su caso, desea utilizar el operador sobrecargado == , por lo que la advertencia es incorrecta.

Hay tres formas de hacer que la advertencia desaparezca:

  1. Puede deshabilitar esa advertencia particular para esa línea única:

    • Para Flake8 / PyFlakes:

      session.query(MyModel).filter(MyModel.my_column != None).all() # noqa: E222

    • Para Pylint:

      session.query(MyModel).filter(MyModel.my_column != None).all() # pylint: disable=singleton-comparison

  2. Puede evitar el uso del operador de igualdad llamando directamente a los __eq__ (para == ) y __ne__ (for != ) De la clase:

    session.query(MyModel).filter(MyModel.my_column.__ne__(None)).all()

  3. Puede usar .is_ y .isnot :

    session.query(MyModel).filter(MyModel.my_column.isnot(None)).all()

    Tenga en cuenta que .is_ y .isnot no son lo mismo que == y != . MyModel.my_column != x puede significar tanto IS NOT NULL como != x según el valor de x su base de datos, por lo que las soluciones 1 y 2 son probablemente mejores a menos que realmente no le guste usar __ -methods y sepa el tipo de el lado derecho de tu expresión.