J'ai un champ booléen dans la table mysql db.
# table model
class TestCase(Base):
__table= 'test_cases'
...
obsoleted = Column('obsoleted', Boolean)
Pour obtenir le nombre de tous les cas de test non obsolètes, procédez comme suit:
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()
print(caseNum)
Cela fonctionne bien, mais le flake8 rapporte l'avertissement suivant:
E712: La comparaison avec False doit être "si cond est False:" ou "si pas Cond:"
Ok, je pense que cela a du sens. Alors changez mon code en ceci:
caseNum = session.query(TestCase).filter(TestCase.obsoleted is False).count()
ou
caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()
Mais aucun d'entre eux ne peut travailler. Le résultat est toujours 0 . Je pense que la clause filter ne prend pas en charge l'opérateur "est" ou "n'est pas". Quelqu'un peut-il me dire comment gérer cette situation? Je ne veux pas désactiver le flocon.
En effet, les filtres SQLAlchemy sont l’un des rares endroits où == False
a un sens. Partout ailleurs vous devriez pas l'utiliser.
Ajoutez un commentaire # noqa
à la ligne et finissez-en.
Ou vous pouvez utiliser sqlalchemy.sql.expression.false
:
from sqlalchemy.sql.expression import false
TestCase.obsoleted == false()
où false()
renvoie la bonne valeur pour votre dialecte SQL de session. Il existe une correspondance sqlalchemy.expression.true
.
SQL Alchemy propose également des fonctions is_
et isnot
que vous pouvez utiliser. Un exemple serait
Model.filter(Model.deleted.is_(False))
@Jruv Utilisez # noqa
devant une déclaration, il ignorera l'avertissement.