首頁  >  文章  >  資料庫  >  為什麼「flake8」在 SQLAlchemy 過濾子句中標記布林比較?

為什麼「flake8」在 SQLAlchemy 過濾子句中標記布林比較?

Barbara Streisand
Barbara Streisand原創
2024-10-27 00:55:03122瀏覽

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>但是,flake8 報告警告「E712:與False 的比較應該是'if cond is False:' 或'if not cond:'。」</p><p>要解決此警告,開發人員可能會嘗試更改程式碼以使用「is False」或「is not」運算子:</p><p></p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase).filter(TestCase.obsoleted is False)。 count()<br>

caseNum = session.query(TestCase).filter(not TestCase.obsoleted).count()<br><p>不幸的是,這些修改會導致不正確的結果,回傳0 而不是預期的計數。這是因為 SQLAlchemy 中的篩選子句不支援「is」或「is not」運算子。 </p><p>要在不禁用flake8 的情況下解決此問題,開發人員可以在有問題的行上使用# noqa 註釋:</p><p></p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase). filter(TestCase.obsoleted == False) # noqa: E712<br>

或者,sqlalchemy.sql.expression .false 函數可以使用:

from alsesql .sql.expression import false<p>caseNum = session.query(TestCase).filter(TestCase.obsoleted == false() )<br></p>

其中回傳🎜>其中傳回所使用的SQL 方言的適當值。

以上是為什麼「flake8」在 SQLAlchemy 過濾子句中標記布林比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn