집 >데이터 베이스 >MySQL 튜토리얼 >SQLAlchemy 필터 절에서 'flake8'이 부울 비교를 플래그 지정하는 이유는 무엇입니까?
flake8 필터 절의 부울 비교 플래그 지정
SQL의 부울 비교를 기반으로 쿼리 결과를 필터링하려고 하면 개발자에게 다음과 같은 경고가 표시될 수 있습니다. "==" 사용에 관한 flake8입니다. 일반적으로 다른 곳에서 부울 비교를 위해 "if cond is False:" 또는 "if not cond:"를 사용하는 것이 권장되지만 이는 SQLAlchemy의 필터 절에는 적용되지 않습니다.
제공된 예에서 부울 필드 (obsoleted)는 데이터베이스 테이블에서 더 이상 사용되지 않는 테스트 사례의 수를 결정하는 데 사용됩니다. 코드는 필터 절에 TestCase.obsoleted == False를 사용합니다.
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()<br>< ;/pre></p> <p>그러나 flake8은 "E712: False와의 비교는 'if cond가 False:' 또는 'if not cond:'여야 합니다."</p> <p>이 경고를 해결하려면 경고를 보고합니다. , 개발자는 "is False" 또는 "is not" 연산자를 사용하도록 코드를 변경하고 싶은 유혹을 받을 수 있습니다.</p> <p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase).filter(TestCase.obsoleted is False). count()<br>
또는
caseNum = session.query(TestCase).filter(TestCase.obsoleted 아님).count()<br>
안타깝게도 이러한 수정으로 인해 잘못된 결과가 발생하고 예상 개수 대신 0이 반환됩니다. 이는 SQLAlchemy의 필터 절이 "is" 또는 "is not" 연산자를 지원하지 않기 때문입니다.
flake8을 비활성화하지 않고 이 문제를 해결하려면 개발자는 문제가 있는 줄에 # noqa 주석을 사용할 수 있습니다.
caseNum = session.query(TestCase).filter(TestCase.obsoleted == False) # noqa: E712<br>
또는 sqlalchemy.sql.expression .false 함수를 사용할 수 있습니다:
from sqlalchemy.sql.expression import false</p> <p>caseNum = session.query(TestCase).filter(TestCase.obsoleted == false() )<br>
여기서 false()는 사용 중인 SQL 언어에 적합한 값을 반환합니다.
위 내용은 SQLAlchemy 필터 절에서 'flake8'이 부울 비교를 플래그 지정하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!