Tester des contraintes d'intégrité

Création de la base de données en mémoire

In [3]:
# coding: utf-8

import sqlite3
bdd=sqlite3.connect(":memory:") # La base est en mémoire
                    
# Pour utiliser un fichier, il faut le nommer. Il sera enregistré  
                    
cur = bdd.cursor () # création d'un cuseur

cur.execute("PRAGMA foreign_keys = ON") # Active les clés étrangères

# création des tables

cur.executescript("""
CREATE TABLE joueur (
  idJoueur INT PRIMARY KEY,
  nomJoueur VARCHAR(30) NOT nULL,
  pnomJoueur VARCHAR(30) NOT NULL
);


CREATE TABLE partie(
    idpartie INT PRIMARY KEY,
    idJoueur1 INT REFERENCES joueur(idjoueur),
    idJoueur2 INT REFERENCES joueur(idjoueur),
    score1 INT NOT NULL,
    score2 INT NOT NULL,
    CHECK((idjoueur1 <>idjoueur2))
);

""")

bdd.commit()


# Alimentation des tables

data_joueur=[
    (1,'Terez','Pascual'),
    (2,'Melusine','Enfaillite'),
    (3,'Leponge','Bob'),
    (4,'Kalité','Filtre'),
    (5,'Gosse','Bo')
]




data_partie=[
    (1,1,2,54,45),
    (2,1,3,45,85),
    (3,4,5,96,35),
]

for donnees in data_joueur : 
    cur.execute(""" INSERT INTO joueur (idjoueur,nomJoueur,pnomJoueur) VALUES(?,?,?)
    """,donnees)
    
bdd.commit()

for donnees in data_partie : 
    cur.execute(""" INSERT INTO partie (idpartie,idjoueur1,idjoueur2,score1,score2) VALUES(?,?,?,?,?)
    """,donnees)
    
bdd.commit()

Test de requêtes

In [4]:
requete = " SELECT * FROM partie" 
cur.execute(requete)

# Affichage des résultats

for element in cur :
    print(element)
(1, 1, 2, 54, 45)
(2, 1, 3, 45, 85)
(3, 4, 5, 96, 35)
In [ ]:
 
In [5]:
requete = " SELECT * FROM joueur"  
cur.execute(requete)

# Affichage des résultats

for element in cur :
    print(element)
(1, 'Terez', 'Pascual')
(2, 'Melusine', 'Enfaillite')
(3, 'Leponge', 'Bob')
(4, 'Kalité', 'Filtre')
(5, 'Gosse', 'Bo')

Test des contraintes d'intégrité

Observer toutes les contraintes d'intégrité et proposer des ordres (avec insert) qui contredisent ces contraintes.

In [ ]:
 
In [ ]:
 
In [ ]:
 

Exercice : transformer la base </h3

Modifier la table 'Partie' pour insérer un attribut idvainqueur qui soit une clé étrangère reliée à l'attribut idjoueur de la table 'Joueur'

Modifier les données 'data_partie' pour prendre en compte ce nouvel attribut.

Fermeture de la base

In [6]:
cur.close()

bdd.close() # Déconnexion
In [ ]: