Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Melaksanakan \"PILIH ... DI MANA ... DI ...\" Pertanyaan dengan MySQLdb dalam Python?

Bagaimana untuk Melaksanakan \"PILIH ... DI MANA ... DI ...\" Pertanyaan dengan MySQLdb dalam Python?

DDD
DDDasal
2024-11-02 17:19:29546semak imbas

How to Execute

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

Dalam Python, melaksanakan pertanyaan SQL yang melibatkan " IN" klausa menggunakan MySQLdb boleh menghadapi cabaran. Pertimbangkan senario berikut:

Masalah:

Percubaan untuk melaksanakan pertanyaan seperti ini:

<code class="sql">SELECT fooid FROM foo WHERE bar IN ('A','C');</code>

dari dalam Python menggunakan kod berikut:

<code class="python">import MySQLdb
import config
connection=MySQLdb.connect(
    host=config.HOST,user=config.USER,passwd=config.PASS,db='test')
cursor=connection.cursor()

sql='SELECT fooid FROM foo WHERE bar IN %s'
args=[['A','C']]
cursor.execute(sql,args)
data=cursor.fetchall()
print(data)
# ()</code>

menghasilkan set data kosong, walaupun jangkaan dua baris.

Punca:

MySQLdb secara automatik menambah petikan tunggal di sekeliling elemen dalam senarai input berhujah, menyebabkan pertanyaan dilaksanakan sebagai:

<code class="sql">SELECT fooid FROM foo WHERE bar IN ("'A'", "'C'")</code>

Pertanyaan ini berbeza daripada pertanyaan asal yang dimaksudkan, yang menggunakan senarai petikan tunggal.

Penyelesaian:

Untuk mengatasi isu ini, anda mesti membina parameter pertanyaan secara manual. Berikut ialah versi diubah suai kod Python yang menangani masalah:

<code class="python">import MySQLdb
import config
connection=MySQLdb.connect(
    host=config.HOST,user=config.USER,passwd=config.PASS,db='test')
cursor=connection.cursor()

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)
data=cursor.fetchall()
print(data)
# (('1',), ('3',))</code>

Dengan membina rentetan in_p menggunakan map() dan menggabungkannya dengan koma, anda mencipta satu siri ruang letak untuk elemen dalam args dengan berkesan. Penggunaan operator % memastikan bahawa pemegang tempat digantikan dengan betul dengan nilai sebenar apabila pertanyaan dilaksanakan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan \"PILIH ... DI MANA ... DI ...\" Pertanyaan dengan MySQLdb dalam Python?. 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