'sqlite3.IntegrityError: сбой ограничения UNIQUE: student3 - ". ID. Я пытаюсь создать таблицу student3 и вставить значения идентификатора и имени - PullRequest
0 голосов
/ 27 мая 2019

Я пишу код для программы, которая подключается к базе данных file12.sqllite3 и создает таблицу 'student3' для хранения идентификатора в качестве первичного ключа и имени. Кроме того, я хочу, чтобы, если файл не был создан, он должен быть создан. Но мой код показывает ошибку ->

sqlite3.IntegrityError: Сбой уникального ограничения: student3.ID

Что не так?

Почему появляется эта ошибка? Где не удалось выполнить УНИКАЛЬНОЕ ограничение?

Вот мой код:

       --- import sqlite3;

        conn=sqlite3.connect('file12.sqlite3');
        c=conn.cursor();``

        c.execute("CREATE TABLE IF NOT EXISTS student3(ID integer 
                   PRIMARY KEY, NAME text)");
        c.execute("INSERT INTO student3 VALUES(11,'Tendo Sinha')");
        c.execute("INSERT INTO student3 VALUES(12,'Harsh Gupta')");
        c.execute("INSERT INTO student3 VALUES(13,'Vishwas Kumar')");
        c.execute("INSERT INTO student3 VALUES(14,'Goel')");
        c.execute("INSERT INTO student3 VALUES(15,'Alok')");

        conn.commit();

        c.execute("SELECT * from student3");
        print(c.fetchall());
        c.execute("SELECT ID from student3")
        print(c.fetchmany(4));

        c.execute("UPDATE student3 SET Name='Bhanu' where ID=14");
        print(c.fetchall());

Как исправить ошибку ->

sqlite3.IntegrityError: Сбой уникального ограничения: student3.ID

1 Ответ

0 голосов
/ 27 мая 2019

Ваш код завершится ошибкой, если вы запустите его дважды: в первый раз он будет работать нормально, когда вы вставляете с доступными значениями идентификатора, но как только вы запустите его снова, вы попытаетесь вставить значения идентификатора, которые уже существуют, то есть что вызывает исключение.

Значения первичного ключа должны быть уникальными, дубликатов быть не может

Я бы рекомендовал вставить этот способ: c.execute("INSERT INTO student3 VALUES(NULL,'Alok')"); с NULL вместо заданного значения для идентификатора. Это позволяет SQLite вставить значение в доступное значение. Для этого вы можете ввести столько студентов, сколько пожелаете, с одинаковыми или разными именами, не получая исключения.

Однако, будьте осторожны с вашим c.execute("UPDATE student3 SET Name='Bhanu' where ID=14");, если вы используете метод вставки NULL , так как вы не будете знать заранее идентификаторы, вам может потребоваться выполнить поиск по самому имени, а не по идентификатору или получить Идентификатор при вставке и сохранение в качестве переменной для последующего использования

Примечание: поскольку SQLite3 уже создает файл, если он не существует, вам не нужно ничего делать там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...