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

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Embajador 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
    1. 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
      1. 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