首页 > 解决方案 > 无法在数据库中执行更新功能

问题描述

我的更新功能有点挣扎——它经常给我一个恼人的错误,我不知道如何解决。

基本上,我想要实现的是从条目小部件中获取数据,然后调用更新方法并将数据从条目小部件传递到数据库。

看法

self.update_employee_data = tk.Button(self.edit_employee_frame, text="Update", command=self.update_data)

    def update_data(self):

    if len(self.edit_employee_name.get() and self.edit_employee_surname.get() and
           self.edit_employee_position.get()) == 0:
        messagebox.showwarning("Missing Values", "Fill empty entries")
    elif (self.edit_employee_age.get() and self.edit_employee_salary.get()) < 1:
        messagebox.showwarning("Missing Values", "Fill empty entries")
    else:
        self.controller.update_employee_data(self.edit_employee_name, self.edit_employee_surname,
                                             self.edit_employee_age, self.edit_employee_position,
                                             self.edit_employee_salary, self.index)
    self.edit_employee_frame.grid_forget()
    self.main_frame.grid()

控制器

    def update_employee_data(self, name, surname, age, position, salary, id):
     self.model.update_employee_data(name, surname, age, position, salary, id)

模型

    def update_employee_data(self, name, surname, age, position, salary, id):
    connection = sqlite3.connect("employees_database.db")
    cursor = connection.cursor()
    cursor.execute("""
        UPDATE employees 
        SET name = ? , surname = ?, age = ?, position = ?, salary = ? WHERE ID = ?
         """, (name, surname, age, position, salary, id,))

    connection.commit()
    cursor.close()
    connection.close()

错误

    cursor.execute("""
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.

我用于从员工表中添加/删除/读取数据的变量类型(我只是在某种程度上难以更新)

    name
<tkinter.StringVar object at 0x000001F53E214730> <class 'tkinter.StringVar'>

surname
<tkinter.StringVar object at 0x000001F53E2147F0> <class 'tkinter.StringVar'>

age
<tkinter.IntVar object at 0x000001F53E2148B0> <class 'tkinter.IntVar'>

position
<tkinter.StringVar object at 0x000001F53E214970> <class 'tkinter.StringVar'>

salary
<tkinter.IntVar object at 0x000001F53E214A30> <class 'tkinter.IntVar'>

id
1 <class 'int'>

标签: pythonsqlite

解决方案


该错误意味着(至少)第一个参数 ( name) 不是绑定参数(如字符串或整数)所支持的类型。

看起来您正在使用 调用该函数self.edit_employee_name,这似乎不是一个String,因为它有一个get()方法,也许是一个 TK 对象?

您应该将这些对象转换为字符串。


推荐阅读