I have a boolean field in the mysql db table.
# table model
class TestCase(Base):
__tablename__ = \'test_cases\'
...
obsoleted = Column(\'obsole
That's because SQLAlchemy filters are one of the few places where == False actually makes sense. Everywhere else you should not use it.
Add a # noqa comment to the line and be done with it.
Or you can use sqlalchemy.sql.expression.false:
from sqlalchemy.sql.expression import false
TestCase.obsoleted == false()
where false() returns the right value for your session SQL dialect. There is a matching sqlalchemy.expression.true.
SQL Alchemy also has is_ and isnot functions you can use. An example would be
Model.filter(Model.deleted.is_(False))
More on those here
@Jruv Use # noqa in front of statement, it'll ignore the warning.
I have a look what exact query is generated for using SQLAlchemy when == and is_ when the database dialect is Postgresql for boolean field:
for == we get:
field == False is converted to field = falsefield == True is converted to field = truefield == None is converted to field IS NULLfor is_() we get:
field.is_(False) is converted to field IS falsefield.is_(True) is converted to field IS truefield.is_(None) is converted to field IS NULLNOTE: is_(not None) will be evaluated to is_(bool(not None) what gives is_(True) giving field = true so you rather go for isnot(None) producing field IS NOT NULL