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!