Rumah  >  Artikel  >  pangkalan data  >  Mengapa MySQLdb Saya Tidak PILIH ... DI MANA ... DI ... Pertanyaan Mengembalikan Keputusan?

Mengapa MySQLdb Saya Tidak PILIH ... DI MANA ... DI ... Pertanyaan Mengembalikan Keputusan?

Susan Sarandon
Susan Sarandonasal
2024-11-01 13:06:30839semak imbas

Why Doesn't My MySQLdb SELECT ... WHERE ... IN ... Query Return Results?

Melaksanakan "SELECT ... WHERE ... IN ..." Menggunakan MySQLdb

Apabila melaksanakan pertanyaan SQL dengan klausa IN menggunakan MySQLdb, adalah penting untuk memberi perhatian kepada bagaimana parameter pertanyaan dibina.

Masalah

Seorang pengguna menghadapi masalah semasa cuba memilih fooids di mana bar berada dalam ('A','C') menggunakan Python dan MySQLdb. Walaupun pertanyaan yang sama berfungsi daripada baris arahan mysql, ia tidak mengembalikan baris dalam Python.

Punca Punca

Isu timbul kerana MySQLdb menukar argumen berparameter [' A','C'] to ("'A'","'C'"), yang mengakibatkan terlalu banyak petikan di sekitar nilai dalam klausa IN.

Penyelesaian

Untuk melaksanakan pertanyaan dengan betul, parameter pertanyaan mesti dibina secara manual. Kod Python berikut menunjukkan cara untuk mencapai ini:

Python 3:

<code class="python">args = ['A', 'C']
sql = 'SELECT fooid FROM foo WHERE bar IN (%s)'
in_p = ', '.join(list(map(lambda x: '%s', args)))
sql = sql % in_p
cursor.execute(sql, args)</code>

Python 2:

<code class="python">args = ['A', 'C']
sql = 'SELECT fooid FROM foo WHERE bar IN (%s)'
in_p = ', '.join(map(lambda x: '%s', args))
sql = sql % in_p
cursor.execute(sql, args)</code>

Atas ialah kandungan terperinci Mengapa MySQLdb Saya Tidak PILIH ... DI MANA ... DI ... Pertanyaan Mengembalikan Keputusan?. 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