我正在尝试执行通过表单更新数据库的功能,但出现此错误: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
答案 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])