چهارشنبه, 19 مهر 1402 05:36

دلیل خطای پایتون هنگام کار با sqlite در پایتون sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are x supplied

من این کد رو در پایتون و پایکیوت نوشتم که با کلیک روی دکمه‌ای سبب حذف یک ردیف از جدول در sqlite میشه:

def delete_user(self):
row_number = self.sender().row_number
shenase = self.tableWidget.item(row_number, 0).text()
cursor.execute("DELETE FROM users WHERE shenase = ?", shenase)
connection.commit()

مشکل این بود که وقتی میخواشتم ردیفی رو حذف کنم این خطا رو می‌داد:

Traceback (most recent call last):
File "/Users/َUsername/Desktop/PySide6/main.py", line 244, in delete_user
cursor.execute("DELETE FROM users WHERE shenase = ?", shenase)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied

مشکل کجاست؟ مشکل اینجاست که پارامتر shenase را به عنوان یک پارامتر به متد execute پاس دادم، در حالی که باید اون رو در یک آرایه قرار بدم. اینطوری:

cursor.execute("DELETE FROM users WHERE shenase = ?", (shenase,))

توجه داشته باشید که shenase حالا درون یک توپل یکتایی قرار گرفته است. این باعث می‌شود که به عنوان یک پارامتر واحد به متد execute پاس داده شود. در غیر این صورت، هر کاراکتر shenase به عنوان یک پارامتر جداگانه در نظر گرفته می‌شود و باعث بروز خطای شما می‌گردد.

دیدگاه شما