使用sqlite3更新python中的数据库错误

时间:2019-07-07 09:42:57

标签: python sqlite

我正在尝试执行通过表单更新数据库的功能,但出现此错误:ValueError: operation parameter must be str

我对其他功能(如删除,读取或插入)没有问题,我也不知道如何解决此问题。 我记下了两个版本的函数更新和相应的错误。

我正在尝试:

def actualizaDatos():

    Id1 = clave.get()
    nombre1 = nombre.get()
    password1 = password.get()
    apellido1 = apellido.get()
    direccion1 = direccion.get()
    comentarios1 = comentarios.get()


    sentencia="UPDATE DATOSUSUARIOS SET ID= ?, NOMBRE_USUARIO = ?, PASSWORD = ?, APELLIDO = ?, DIRECCION = ?, COMENTARIOS = ? WHERE ID=?", [clave.get()]

    miCursor.execute(sentencia, [Id1, nombre1, password1, apellido1, direccion1, comentarios1])

我希望数据库能够更新,但出现此错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\John\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "Practica_Guiada.py", line 148, in actualizaDatos
    miCursor.execute(sentencia, [Id1,nombre1, password1, apellido1, direccion1, comentarios1])
ValueError: operation parameter must be str

1 个答案:

答案 0 :(得分:1)

分配给[clave.get()]的末尾不需要sentencia。就是将变量设置为元组,而不是SQL字符串。

您的miCursor.execute()调用中也没有足够的参数。 SQL中有7个?,但参数列表中只有6个元素。您需要重复Id1,因为它是在开头和结尾(但是实际上,不需要设置ID,因为您只需将其设置为已经具有的相同值)即可。

def actualizaDatos():

    Id1 = clave.get()
    nombre1 = nombre.get()
    password1 = password.get()
    apellido1 = apellido.get()
    direccion1 = direccion.get()
    comentarios1 = comentarios.get()


    sentencia="UPDATE DATOSUSUARIOS SET NOMBRE_USUARIO = ?, PASSWORD = ?, APELLIDO = ?, DIRECCION = ?, COMENTARIOS = ? WHERE ID=?"

    miCursor.execute(sentencia, [nombre1, password1, apellido1, direccion1, comentarios1, Id1])