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))
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.