Continuando la serie de SQLite con Python

https://fragmentosdecodigo.home.blog/2020/12/09/introduccion-a-sqlite-con-python/

Creamos un nuevo archivo .py y crearemos un nuevo archivo de BD llamado «AdministracionAlumnos»

import sqlite3
conexion=sqlite3.connect("AdministracionAlumnos")
cursor = conexion.cursor()
#instrucción en varias líneas
cursor.execute('''
    CREATE TABLE CURSOS (
    codigo_curso VARCHAR(4) PRIMARY KEY,
    nombre_curso VARCHAR(50),
    cupos_curso INTEGER,
    horas_curso INTEGER)
    '''
)

loscursos=[
    ("CI01","Python básico",50,36), #CI01 campo clave
    ("CI02","Java",150,30),
    ("CI03","C#",250,50),
    ("CI04","Python intermedio",50,50),
    ("CI05","Python avanzado",75,100)
]
cursor.executemany("INSERT INTO CURSOS VALUES (?,?,?,?)", loscursos)
conexion.commit()
conexion.close()

Abrimos este archivo con SQLite y vemos el campo definido como PRIMARY KEY:

Probamos hacer la inserción de un nuevo registro. Como la llave primaria del mismo NO existe, lo va a insertar. Modificamos el archivo y lo ejecutamos:

import sqlite3
conexion=sqlite3.connect("AdministracionAlumnos")
cursor = conexion.cursor()

#Lo insertar porque no existe
cursor.execute("INSERT INTO CURSOS VALUES ('CI06','PHP',60,100)")
conexion.commit()

conexion.close()

Si intentamos ingresar un registro con una llave primaria ya existente, se dará el siguiente error:

import sqlite3
conexion=sqlite3.connect("AdministracionAlumnos")
cursor = conexion.cursor()

#No lo inserta porque ya existe
cursor.execute("INSERT INTO CURSOS VALUES ('CI04','JS',40,50)")

conexion.close()