Ваш код завершится ошибкой, если вы запустите его дважды: в первый раз он будет работать нормально, когда вы вставляете с доступными значениями идентификатора, но как только вы запустите его снова, вы попытаетесь вставить значения идентификатора, которые уже существуют, то есть что вызывает исключение.
Значения первичного ключа должны быть уникальными, дубликатов быть не может
Я бы рекомендовал вставить этот способ: c.execute("INSERT INTO student3 VALUES(NULL,'Alok')");
с NULL вместо заданного значения для идентификатора. Это позволяет SQLite вставить значение в доступное значение. Для этого вы можете ввести столько студентов, сколько пожелаете, с одинаковыми или разными именами, не получая исключения.
Однако, будьте осторожны с вашим c.execute("UPDATE student3 SET Name='Bhanu' where ID=14");
, если вы используете метод вставки NULL , так как вы не будете знать заранее идентификаторы, вам может потребоваться выполнить поиск по самому имени, а не по идентификатору или получить Идентификатор при вставке и сохранение в качестве переменной для последующего использования
Примечание: поскольку SQLite3 уже создает файл, если он не существует, вам не нужно ничего делать там