Rumah  >  Artikel  >  pangkalan data  >  Mengapakah `flake8` Membenderakan Perbandingan Boolean dalam Klausa Penapis SQLAlchemy?

Mengapakah `flake8` Membenderakan Perbandingan Boolean dalam Klausa Penapis SQLAlchemy?

Barbara Streisand
Barbara Streisandasal
2024-10-27 00:55:03122semak imbas

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

flake8 Menandakan Perbandingan Boolean dalam Klausa Penapis

Apabila cuba menapis hasil pertanyaan berdasarkan perbandingan boolean dalam SQL, pembangun mungkin menghadapi amaran daripada flake8 mengenai penggunaan "==". Walaupun secara amnya disyorkan untuk menggunakan "jika cond is False:" atau "if not cond:" untuk perbandingan boolean di tempat lain, ini tidak terpakai untuk menapis klausa dalam SQLAlchemy.

Dalam contoh yang disediakan, medan boolean (usang) dalam jadual pangkalan data digunakan untuk menentukan kiraan kes ujian tidak lapuk. Kod menggunakan TestCase.obsoleted == False dalam klausa penapis.

caseNum = session.query(TestCase).filter(TestCase.obsoleted == False).count()<br>&lt ;/pre></p>
<p>Walau bagaimanapun, flake8 melaporkan amaran "E712: Comparison to False hendaklah 'jika cond is False:' atau 'if not cond:'."</p>
<p>Untuk menangani amaran ini , pembangun mungkin tergoda untuk menukar kod untuk menggunakan pengendali "adalah Palsu" atau "bukan":</p>
<p><pre class="brush:php;toolbar:false">caseNum = session.query(TestCase).filter(TestCase.obsoleted is False). count()<br>

atau

caseNum = session.query(TestCase).filter(bukan TestCase.usang).count()<br>

Malangnya, pengubahsuaian ini menghasilkan hasil yang salah, mengembalikan 0 dan bukannya kiraan yang dijangkakan. Ini kerana klausa penapis dalam SQLAlchemy tidak menyokong pengendali "is" atau "is not".

Untuk menyelesaikan isu ini tanpa melumpuhkan flake8, pembangun boleh menggunakan ulasan # noqa pada baris yang menyinggung:

caseNum = session.query(TestCase).filter(TestCase.obsoleted == False) # noqa: E712<br>

Sebagai alternatif, sqlalchemy.sql.expression Fungsi .false boleh digunakan:

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

di mana false() mengembalikan nilai yang sesuai untuk dialek SQL yang digunakan.

Atas ialah kandungan terperinci Mengapakah `flake8` Membenderakan Perbandingan Boolean dalam Klausa Penapis SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn