>데이터 베이스 >MySQL 튜토리얼 >SQLAlchemy 필터 절에서 'flake8'이 부울 비교를 플래그 지정하는 이유는 무엇입니까?

SQLAlchemy 필터 절에서 'flake8'이 부울 비교를 플래그 지정하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-27 00:55:03212검색

Why is `flake8` Flagging Boolean Comparisons in SQLAlchemy Filter Clauses?

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>&lt ;/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.