Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sqlite3更新python中的数据库错误_Python_Sqlite - Fatal编程技术网

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

使用sqlite3更新python中的数据库错误,python,sqlite,Python,Sqlite,我试图执行一个通过表单更新数据库的函数,但遇到以下错误:ValueError:operation参数必须是str 我对删除、读取或插入等其他功能没有问题,我不知道如何解决这个问题。 我写下了两个版本的函数更新和各自的错误 我正在尝试这个: def actualizaDatos(): Id1 = clave.get() nombre1 = nombre.get() password1 = password.get() apellido1 = apellido.ge

我试图执行一个通过表单更新数据库的函数,但遇到以下错误:
ValueError:operation参数必须是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

判决的赋值结束时,您不需要
[clave.get()]
。这是将变量设置为元组,而不是SQL字符串

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


您正在将
sentencia
设置为元组,因为在作业结束时有
,[clave.get()]
。这是干什么用的?在
cursor.execute()
中传递给数据库的一个查询参数不是字符串类型,尽管它是数据库所必需的。请查看表定义和传递给查询的实际值,并查看类型是否有效。@jnns这不是参数,而是查询字符串本身,它们出于某种原因将其转换为元组。SQLite没有针对primatives的任何类型强制执行
,[clave.get()]
请将其从
判决中删除,但是,为什么我必须将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])