tables postgres in_ create and python mysql sqlalchemy flake8

in_ - sqlalchemy python postgres



flake8 se queja de la comparación booleana "==" en la cláusula de filtro (3)

SQL Alchemy también tiene funciones is_ e is_ que puede usar. Un ejemplo sería

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

Más sobre ésos aquí

Tengo un campo booleano en la tabla mysql db.

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

Para obtener el recuento de todos los casos de prueba no obsoletos, eso se puede hacer simplemente así:

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

Eso funciona bien, pero el flake8 informa la siguiente advertencia:

E712: la comparación con False debería ser "if cond is False:" o "if not cond:"

De acuerdo, creo que tiene sentido. Así que cambie mi código a esto:

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

o

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

Pero ninguno de ellos puede funcionar. El resultado es siempre 0. Creo que la cláusula de filtro no admite el operador "es" o "no es". ¿Alguien me puede decir cómo manejar esta situación? No quiero deshabilitar el copo.


Eso es porque los filtros SQLAlchemy son uno de los pocos lugares donde == False realmente tiene sentido. En todos lados, no deberías usarlo.

Agregue un comentario # noqa a la línea y # noqa con esto.

O puede usar sqlalchemy.sql.expression.false :

from sqlalchemy.sql.expression import false TestCase.obsoleted == false()

donde false() devuelve el valor correcto para su dialecto SQL de sesión. Hay un sqlalchemy.expression.true coincidente.


@Jruv Use # noqa delante de la declaración, ignorará la advertencia.