Ошибка обновления базы данных в python с sqlite3 - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь сделать функцию, которая обновляет базу данных через форму, но я получаю эту ошибку: 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 Ответ

1 голос
/ 07 июля 2019

Вам не нужно [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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...