Bonjour,
Je rencontre actuellement un problème en SQL avec les clefs étrangères.
Je souhaite créer une table Auteurs comportant trois paramètres :
- id_auteur, une clé primaire attachée à l’auteur
- prenom, le prénom de l’auteur
- nom, le nom de l’auteur
Je voudrais pouvoir créer une seconde table livre comportant :
- id_livre, une clé primaire attachée au livre
- titre, le titre du livre
- auteur, une clef étrangère correspondant à id_auteur
Voici le code SQL que j’ai réalisé pour cela :
CREATE TABLE Auteurs(
id_auteur INTEGER PRIMARY KEY,
prenom TEXT,
nom TEXT
);
CREATE TABLE Livres(
id_livre INTEGER PRIMARY KEY,
titre TEXT,
auteur INTEGER,
FOREIGN KEY(auteur) REFERENCES Auteurs(id_auteur)
);
J’utilise le module python sqlite3 de Python ; voici mon code complet :
import sqlite3
connexion = sqlite3.connect("database2.db")
curseur = connexion.cursor()
curseur.execute("PRAGMA foreign_keys = ON;")
curseur.executescript(
'''
DROP TABLE IF EXISTS Auteurs;
DROP TABLE IF EXISTS Livres;
CREATE TABLE Auteurs(
id_auteur INTEGER PRIMARY KEY,
prenom TEXT,
nom TEXT
);
CREATE TABLE Livres(
id_livre INTEGER PRIMARY KEY,
titre TEXT,
auteur INTEGER,
FOREIGN KEY(auteur) REFERENCES Auteurs(id_auteur)
);
''')
data_auteurs = [("Emile","Zola"),\
("J.K.","Rowling"),\
("Lewis","Caroll"),\
("J.R.R","Tolkien"),\
("Christopher","Paolini")]
curseur.executemany("INSERT INTO Auteurs(prenom,nom) VALUES (?,?)",data_auteurs)
data_livres = [("Thérèse Raquin",1),\
("Harry Potter",2),\
("Alice au pays des merveilles",3),\
("Bilbo le hobbit",4),\
("Eragon",5)]
curseur.executemany("INSERT INTO Livres(titre,auteur) VALUES (?,?)",data_livres)
for auteur in curseur.execute("SELECT * FROM Auteurs"):
print("Auteur :",auteur)
for livre in curseur.execute("SELECT * FROM Livres"):
print("Livre :",livre)
connexion.commit()
connexion.close()
J’obtiens l’erreur suivante et n’arrive pas à m’en débarrasser :
Traceback (most recent call last):
File "/Users/christophe_mayeux/Documents/tests sur sqlite3.py", line 8, in <module>
curseur.executescript(
sqlite3.IntegrityError: FOREIGN KEY constraint failed
Joyeuses fêtes,
+0
-0