Mengapakah \'PILIH ... DI MANA ... DI ...\' Pertanyaan Gagal dalam MySQLdb?

Barbara Streisand
Lepaskan: 2024-11-01 17:32:02
asal
797 orang telah melayarinya

Why is

Melaksanakan "SELECT ... WHERE ... IN ..." menggunakan MySQLdb

Walaupun berjaya melaksanakan pertanyaan SQL daripada baris arahan MySQL, anda mungkin menghadapi masalah melaksanakan pertanyaan dengan sintaks "WHERE ... IN ..." dari dalam Python menggunakan MySQLdb. Mari kita siasat masalah dan teroka penyelesaian.

Dalam kes anda, anda tidak dapat mendapatkan semula baris dengan pertanyaan yang menapis lajur "bar" dengan klausa "IN", manakala pertanyaan serupa yang menapis " lajur fooid" dengan "IN" berjaya. Ketidakkonsistenan ini boleh dikaitkan dengan cara MySQLdb mengendalikan pertanyaan berparameter.

Apabila anda menentukan tatasusunan nilai sebagai argumen kepada MySQLdb, ia secara automatik menukarnya menjadi tuple rentetan dengan petikan tunggal, mengakibatkan sintaks yang salah untuk klausa "IN". Sebagai contoh, kod anda menukar ['A','C'] kepada ("'A'","'C'").

 args=[['A','C']] 

Untuk menyelesaikannya, anda mesti membina rentetan SQL secara manual dan menggunakan Python untuk menggabungkan nilai dalam klausa "IN":

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

Sebagai alternatif, untuk Python 2, anda boleh menggunakan kod berikut:

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

Kod ini menjana rentetan SQL secara dinamik dengan bilangan ruang letak yang betul ('%s') dengan mengulangi nilai dalam tatasusunan dan mencantumkannya dengan koma. Dengan melaksanakan pertanyaan yang dibina secara manual ini, anda akan memperoleh hasil yang diharapkan, memilih fooids di mana lajur "bar" berada dalam ('A','C')

Atas ialah kandungan terperinci Mengapakah \'PILIH ... DI MANA ... DI ...\' Pertanyaan Gagal dalam MySQLdb?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!