python - 이란 - flake8 불린 비교에 불평 "=="필터 조항




flake8 이란 (2)

SQL Alchemy에는 is_is_ 함수가 있습니다. 예를 들어 보겠습니다.

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

여기에 대한 자세한 내용

mysql db 테이블에 부울 필드가 있습니다.

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

폐기되지 않은 모든 테스트 케이스의 수를 얻으려면 다음과 같이 간단하게 수행 할 수 있습니다.

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

그건 잘 작동하지만 flake8보고 다음과 같은 경고 :

E712 : False와의 비교는 "cond가 False이면"또는 "cond가 아닌 경우 :"이어야합니다.

좋아, 나는 그것이 합리적이라고 생각한다. 그래서 내 코드를 다음과 같이 변경하십시오 :

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

또는

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

그러나 둘 다 일할 수 없습니다. 결과는 항상 0입니다. 필터 절이 연산자 "is"또는 "is not"를 지원하지 않는다고 생각합니다. 누군가이 상황을 처리하는 방법을 알려줄 수 있습니까? 나는 찌질을 무력하게하고 싶지 않다.


SQLAlchemy 필터는 실제로 == False 가 의미가있는 몇 안되는 장소 중 하나이기 때문입니다. 다른 곳에서는 사용 하지 않아야합니다.

# noqa 주석을 줄에 추가하고 # noqa 십시오.

또는 sqlalchemy.sql.expression.false 를 사용할 수 있습니다.

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

여기서 false() 는 세션 SQL 방언에 적합한 값을 리턴합니다. 일치하는 sqlalchemy.expression.true 있습니다.





flake8