Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Pertanyaan SQL Berparameter Saya Melemparkan Ralat 'TypeError: Tidak Semua Argumen Ditukar'?

Mengapa Pertanyaan SQL Berparameter Saya Melemparkan Ralat 'TypeError: Tidak Semua Argumen Ditukar'?

Linda Hamilton
Lepaskan: 2024-12-30 15:06:11
asal
930 orang telah melayarinya

Why Does My Parameterized SQL Query Throw a

TypeError: Tidak Semua Argumen Ditukar Semasa Pemformatan Rentetan dalam Pertanyaan SQL Berparameter

Menghadapi ralat "TypeError: bukan semua argumen ditukar semasa pemformatan rentetan " apabila menggunakan rentetan dalam pertanyaan SQL berparameter adalah perkara biasa isu.

Contoh kod yang disediakan:

cur.execute("SELECT * FROM records WHERE email LIKE '%s'", search)
Salin selepas log masuk

cuba untuk melaksanakan pertanyaan dengan rentetan yang diformatkan dengan pemegang tempat (%s) untuk parameter carian. Walau bagaimanapun, kaedah ini tidak betul.

Untuk menyelesaikan ralat ini, cara yang betul untuk melaksanakan pertanyaan berparameter adalah dengan menyediakan nilai pemegang tempat sebagai senarai:

cur.execute("SELECT * FROM records WHERE email LIKE %s", [search])
Salin selepas log masuk

Dalam kes ini, [ carian] ialah senarai yang mengandungi parameter carian tunggal. MySQLdb (dan perpustakaan pangkalan data lain yang serupa) mengharapkan senarai nilai untuk ditukar dan diformatkan. Melepasi nilai tunggal secara langsung akan mengakibatkan ralat.

Alasan di sebalik ini ialah pertanyaan berparameter boleh mengandungi berbilang ruang letak dalam pernyataan SQL, setiap satu mewakili nilai yang berbeza. Dengan menyediakan nilai sebagai senarai, pustaka pangkalan data boleh mengulangi senarai dan menukar setiap nilai dengan sewajarnya.

Oleh itu, apabila menggunakan ruang letak dalam pertanyaan SQL berparameter, adalah penting untuk menyediakan nilai sebagai senarai atau tuple . Ini memastikan bahawa semua argumen ditukar dan diformat dengan betul, menghalang ralat "tidak semua argumen ditukar".

Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Berparameter Saya Melemparkan Ralat 'TypeError: Tidak Semua Argumen Ditukar'?. 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