Rumah > pangkalan data > tutorial mysql > 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
Lepaskan: 2024-11-02 17:19:29
asal
631 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan