Как удалить запись из базы данных в SQLite, используя python и Tkinter по IOD, используя номер из виджета записи - PullRequest
0 голосов
/ 02 августа 2020

Здравствуйте, я хочу, чтобы пользователь моих GUI i, созданных с помощью Tkinter и python, мог добавлять клиентов и удалять их из таблицы, в которой хранится вся информация о клиентах с использованием SQLite. Функция добавления клиента сохраняет значения в созданной мной таблице, функция запроса отображает их на экране, но функции удаления вызывают у меня проблемы. Я хочу иметь возможность ввести число в поле ввода Delete_Box внутри GUI и удалить строку с йодом, равным числу в поле ввода. Код, о котором я спрашиваю, находится в определении функции удаления. Я очень признателен за любую помощь. Спасибо.

root = Tk()
root.title("THE HAT COMPANY")
root.iconbitmap(r"C:\Users\user\Desktop\logo2.ico")
root.geometry("750x500")

f1 = Frame(root)
f2 = Frame(root)
f3 = Frame(root)
f4 = Frame(root)

Delete_Box = Entry(f2, width = 25)
Delete_Box.grid(row=10, column=3)
def Delete_Customer():
#THIS IS WHERE THE PROBLEM IS
    conn = sqlite3.connect('Database')
    C = conn.cursor()

   C.execute("DELETE FROM Database WHERE oid = " + Delete_Box.get()) 
#I Want it to delete the customer who's OID matches the number I type in the Delete_Box entry box

   Delete_Box.delete(0, END)
#and i want the text inside the entry box to go away and leave a blank box


   conn.commit()
   conn.close()

Delete_Btn = Button(f2, text = "Delete Customer", width = 25, command= Delete_Customer())
Delete_Btn.grid(row=10,column=2)

raise_frame(f2)
root.mainloop()

Я видел видео, где парень просто написал C.Execute("DELETE FROM Database WHERE oid = " + Delete_Box.get(), и это сработало для него, но по какой-то причине я получаю эту ошибку

C:\Users\user\AppData\Local\Programs\Python\Python38-32\python.exe "C:/Users/user/PycharmProjects/Program1/PART 1.py"
Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/Program1/PART 1.py", line 114, in <module>
    Delete_Btn = Button(f2, text = "Delete Customer", width = 25, command= Delete_Customer())
  File "C:/Users/user/PycharmProjects/Program1/PART 1.py", line 106, in Delete_Customer
    C.execute("DELETE FROM Database WHERE oid = " + Delete_Box.get())
sqlite3.OperationalError: incomplete input

1 Ответ

0 голосов
/ 02 августа 2020

При назначении функции команде кнопки, вы не должны вызывать ее, используя скобки, если у вас есть параметры для передачи, u следует использовать lambda. Здесь достаточно удалить скобки, поскольку вы не передаете никаких параметров, это должно исправить ошибку:

Delete_Btn = Button(f2, text = "Delete Customer", width = 25, command = Delete_Customer)
Delete_Btn.grid(row=10,column=2)

Если вы хотите передать параметры, используйте:

Delete_Btn = Button(f2, text = "Delete Customer", width = 25, command = lambda: Delete_Customer())
Delete_Btn.grid(row=10,column=2)

Пусть я знаю, если есть сомнения,

Ура

...