Невозможно удалить запись, извлекая только один столбец записи. Есть идеи?

#python #tkinter

#python #tkinter

Вопрос:

Что я сделал:

Я создал элемент таблицы (в python с подключением к mysql для хранения указанной таблицы в базе данных mysql), который содержит 3 столбца (ICODE, INAME, ITYPE). Затем я создал окно графического интерфейса tkinter с 3 текстовыми полями, которое позволяет пользователям вводить входные данные ICODE, INAME, ITYPE. У него есть две кнопки: Добавить элемент и удалить элемент.

Что я пытаюсь сделать:

Я написал следующий код, который будет принимать ICODE и удалять запись с введенным ICODE

Код:

 def delitem():
    icode=tcode.get("1.0","end-1c")
    #Database Connection
    if icode=="":
        tk.messagebox.showinfo("Please enter a code")
    else:
        import mysql.connector as sqltor
                                   
        connection=sqltor.connect(host="localhost",user="root",passwd=" 
                                                     ",database="apparelstore")
        tkcursor=connection.cursor(prepared=True)
        sql="delete from item where icode=%s"
        val="icode"
        tkcursor.execute(sql,val)
        connection.commit()
        tk.messagebox.showinfo("Item deleted")
        tkcursor.close()
 

Ошибка:

Неправильное количество аргументов, выполняющих подготовленный оператор

Комментарии:

1. Ожидается, tkcursor.execute(sql, (val,)) что второй аргумент будет кортежем или списком.

2. Вы имели val в виду строку или присваиваете ей переменную? Кроме того, если вы не передадите кортеж в качестве второго аргумента, потребуется дополнительно len('icode') (т.Е. 5) Больше аргументов и, следовательно, ошибка, которую вы получили.

3. Я думаю, что это должно быть tkcursor.execute(sql, (icode,)) вместо того icode , чтобы содержать введенное вами значение.

4. @acw1668 Я попробовал, и теперь это сработало. Спасибо

Ответ №1:

Оператор tkcursor.execute(sql, val) должен быть:

 tkcursor.execute(sql,(val,))
 

Комментарии:

1. Я попробовал это, и это все еще не работает, ошибок тоже нет

2. Вместо tkcursor.close() этого вы должны закрыть соединение, т. Е. Оно должно быть connection.close() . Я не знаю, поможет ли это, но просто попробуйте и посмотрите.

3. Как заявил @acw1668, проблема заключалась в tkcursor.execute(sql,val) том, что должно было быть tkcursor.execute(sql,(icode,)) . Но то, что вы указали, также является ошибкой, я должен был закрыть соединение, а не курсор