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 به عنوان یک پارامتر جداگانه در نظر گرفته میشود و باعث بروز خطای شما میگردد.