Sqlite3.IntegrityError: falla restricción UNIQUE

Resuelto
Janken -  
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   -
Hola.

Me encuentro con un pequeño problema con mi base de datos. De hecho, cuando quiero hacer un registro en mi tabla de emails, que dispone de una columna para el identificador (id) y una columna para el email, se me muestra el siguiente error: sqlite3.IntegrityError: UNIQUE constraint failed: emails.id.

Así que aquí está mi pequeño programa en Python:
from tkinter import * from random import * from string import * from random import * from sqlite3 import * # Base de datos para registrar direcciones electrónicas connection = connect('base.db') # Cursor para las consultas hacia la base de datos cursor = connection.cursor() # Ventana window = Tk() # Función para configurar un fondo de color aleatorio def hexadecimal(): bits = list(str(i) for i in range(10)) + list("ABCDEF") colorcode = "#" for i in range(6): colorcode = colorcode + choice(bits) return colorcode # Características de la ventana window.title("Window") window.minsize(720, 480) window.config(background=hexadecimal()) # Frame frame = Frame(window, bg=window['background']) # Función para generar una dirección electrónica aleatoria def generate_email(): entry.delete(0, END) chars = ascii_lowercase + digits + "." email = sample(chars, randint(5, 10)) + list("@gmail.com") for i in email: email = "".join(email) entry.insert(0, email) cursor.execute("INSERT INTO emails values(?, ?)", (cursor.lastrowid, email)) connection.commit() # Widgets entry = Entry(frame, bg=hexadecimal(), bd=2) button = Button(frame, text="Click", background=hexadecimal(), bg=hexadecimal(), command=generate_email) # Mostrar los elementos frame.pack(expand=YES) entry.pack() button.pack() # Mostrar la ventana window.mainloop() # Cierre de la conexión a la base de datos connection.close()


Merci de votre aide.

1 respuesta

yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
 
hola,
¿en qué línea de código obtienes este error?
¿has verificado el valor de
cursor.lastrowid
?
¿cómo definiste la tabla emails?
0
Janken
 
Hola de nuevo.
El error ocurre en la línea 41. Como he puesto el identificador de mi tabla en auto-incremento, el valor de cursor.lastrowid lógicamente no debería dar problemas.
En realidad, cuando ejecuto el programa y hago clic una vez en el botón que dispara la función de registro del correo electrónico, no ocurre ningún error, pero cuando hago clic más de una vez, se produce el error.
0
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Janken
 
lógicamente, no hay ninguna razón para colocar un campo autoincremental en un INSERT. incluso está contra indicado, como puedes constatar.
si examinas el valor de
cursor.lastrowid
cada vez, entenderás lo que está pasando.
-2