Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menyelesaikan Isu Penggantian Parameter dalam SQLite Apabila Menggunakan Urutan vs. Rentetan?

Bagaimana untuk Menyelesaikan Isu Penggantian Parameter dalam SQLite Apabila Menggunakan Urutan vs. Rentetan?

DDD
Lepaskan: 2024-10-19 15:28:30
asal
603 orang telah melayarinya

How to Resolve Parameter Substitution Issues in SQLite When Using Sequences vs. Strings?

Menyelesaikan Masalah Penggantian Parameter dalam SQLite

Menghadapi isu semasa menggunakan penggantian parameter dalam SQLite3 dengan Python? Berikut ialah penyiasatan dan penyelesaian yang mendalam.

Dalam percubaan untuk menghalang suntikan SQL, penggantian parameter menggunakan '?' adalah dinasihatkan. Walau bagaimanapun, ralat mungkin timbul apabila menggunakan pendekatan ini. Contohnya, dengan kod berikut:

<code class="python">for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
    self.cursor.close()</code>
Salin selepas log masuk

Ralat "sqlite3.ProgrammingError: Bilangan pengikatan yang tidak betul yang dibekalkan" berlaku, menunjukkan bahawa pernyataan itu menentukan satu pengikatan, manakala lapan disediakan. Isu ini berpunca daripada penciptaan awal jadual pangkalan data. Modul yang bertanggungjawab untuk penciptaan pangkalan data mengandungi lapan pengikatan, yang membawa kepada ketidakpadanan.

<code class="python">cursor.execute("""CREATE TABLE Equipment 
    (id INTEGER PRIMARY KEY, 
    name TEXT,
    price INTEGER, 
    weight REAL, 
    info TEXT, 
    ammo_cap INTEGER, 
    availability_west TEXT,
    availability_east TEXT)""")</code>
Salin selepas log masuk

Ironinya, menggantikan '?' dengan '%s' yang kurang selamat menyelesaikan masalah:

<code class="python">for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
    self.cursor.close()</code>
Salin selepas log masuk

Sebab di sebalik paradoks ini terletak pada cara Cursor.execute() menerima parameter keduanya. Daripada rentetan tunggal, ia menjangkakan urutan, tetapi anda melepasi rentetan panjang lapan.

Untuk membetulkan isu ini, laraskan kod kepada yang berikut:

<code class="python">self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])</code>
Salin selepas log masuk

Pengubahsuaian ini memastikan bahawa penggantian parameter berfungsi seperti yang dimaksudkan. Sentiasa pastikan bahawa parameter kedua dihantar ke Cursor.execute() sepadan dengan bilangan pengikatan yang ditentukan dalam pernyataan SQL.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Isu Penggantian Parameter dalam SQLite Apabila Menggunakan Urutan vs. Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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