programing

flake8이 필터 절의 부울 비교 "=="에 대해 불만을 제기합니다.

itsource 2022. 9. 21. 22:10
반응형

flake8이 필터 절의 부울 비교 "=="에 대해 불만을 제기합니다.

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와의 비교는 "조건이 False인 경우" 또는 "조건이 아닌 경우:"여야 합니다.

그래, 말이 되는 것 같아.내 코드를 다음과 같이 변경합니다.

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

또는

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

하지만 둘 다 일을 할 수 없어요.결과는 항상 0입니다.필터 조항은 연산자 "is" 또는 "is not"를 지원하지 않는다고 생각합니다.이 상황을 어떻게 처리해야 할지 누가 좀 알려주시겠어요?플레이크를 비활성화 시키고 싶지 않아요.

SQL Chemy 필터는 몇 안 되는 장소 중 하나이기 때문입니다.== False말이 되네다른 곳은 사용하지 마세요.

를 추가합니다.# noqa라인에 코멘트를 달아 주세요.

또는 다음을 사용할 수 있습니다.

from sqlalchemy.sql.expression import false

TestCase.obsoleted == false()

어디에false()세션 SQL 방언의 올바른 값을 반환합니다.일치하는 것이 있습니다.

SQL Alchemy에는is_그리고.isnot사용할 수 있는 기능예를 들면 다음과 같습니다.

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

자세한 것은 이쪽

어떤 쿼리가 생성되어 있는지 확인했습니다.SQLAlchemy언제==데이터베이스 사투리가 boolean 필드의 경우:

  • 위해서==다음과 같은 것을 얻을 수 있습니다.

    1. field == False로 변환됩니다.field = false
    2. field == True로 변환됩니다.field = true
    3. field == None로 변환됩니다.field IS NULL
  • 위해서is_()다음과 같은 것을 얻을 수 있습니다.

    1. field.is_(False)로 변환됩니다.field IS false
    2. field.is_(True)로 변환됩니다.field IS true
    3. field.is_(None)로 변환됩니다.field IS NULL

주의: is_(not None)에 대해 평가되다is_(bool(not None)무엇 때문에is_(True)부여field = true그러니 차라리 네가 해.isnot(None)생산.field IS NOT NULL

왜 안 쓰세요?.filter_by(field=True)/.filter_by(field=False)?

@Jruv 사용# noqa경고문 앞에서 경고를 무시합니다.

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

squalchemy 버전에서 실행해 보십시오.

언급URL : https://stackoverflow.com/questions/18998010/flake8-complains-on-boolean-comparison-in-filter-clause

반응형