TP Python et SQL⚓︎
Dans ce TP, nous allons voir comment utiliser Python pour créer une base de données, créer des tables et effectuer des requêtes en SQL sur cette base de données.
Exécuter le code suivant et contrôler en même temps avec DB Browser.
Modèle-type d'un script Python-SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
- La ligne 4 permet d'ouvrir une base de données, ou d'en créer une si le fichier
.db
n'existe pas, et de créer une connexion à cette base de données. - La ligne 39 met fin à cette connexion.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
On crée ensuite ligne 7 un objet de type cursor
qui va permettre d'envoyer des requêtes sur la base données.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
La méthode execute
permet d'effectuer une requête, que l'on passe en argument sous forme d'une chaîne de caractères. Si on souhaite l'écrire sur plusieurs lignes, on l'écrit entre triples double-quotes.
À noter l'option IF NOT EXISTS
qui permet de ne pas écraser une table déjà existante.
La méthode executemany
permet d'effectuer plusieurs requêtes, une par élément d'une liste passée en argument. On utilise des placeholders ?
pour indiquer où remplacer par les valeurs des éléments de la liste.
On stocke la table des résultats d'une requête SELECT
dans une variable, sur laquelle on peut ensuite itérer:
fetchone
renvoie la première ligne, et passe à la suivante.fetchall
renvoie l'ensemble des lignes, sous forme d'une liste.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
On valide ligne 36 les requêtes pour exécution sur la base de données.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
Exercice
-
Écrire un programme qui crée une table devoir(nom
String
, noteInt
) et qui demande ensuite en boucle un nom et une note en les ajoutant à la table. Le programme stoppe dès qu'on entre comme nomq
ouQ
. -
Améliorer le programme précédent pour permettre de rentrer des notes ou des consulter des notes.
Pour la gestion des choix, on pourra utiliser le code suivant:
1 2 3 4 5 6 7 8 9 10 |
|
Il vous faut donc écrire les fonctions saisie
et consultation
et à insérer ce code dans l'architecture de l'exemple donné.
import sqlite3
#Connexion
connexion = sqlite3.connect('mondevoir.db')
#Récupération d'un curseur
c = connexion.cursor()
# ---- début des instructions SQL
#Création d'une table
c.execute(\"\"\"
CREATE TABLE IF NOT EXISTS devoir(
nom TEXT,
note INTEGER);
\"\"\")
def saisie():
go = True
while go:
nom = input('Nom ? ')
if nom.lower() == 'q':
go = False
else:
note = int(input('Note ? '))
c.execute(\"INSERT INTO devoir VALUES (?, ?);\", [nom, note])
def consultation():
go = True
while go:
nom = input('Nom ? ')
if nom.lower() == 'q':
go = False
else:
rq = c.execute(\"SELECT note FROM devoir WHERE nom = ?;\", [nom]).fetchone()
if rq is None:
print(\"Elève inconnu\")
else:
print(\"Note: \", rq[0])
go = True
while go:
choix = input(\"Menu\n1. Saisir des notes\n2. Consulter des notes\n3. Quitter\nVotre choix: \")
if choix == '1':
saisie()
elif choix == '2':
consultation()
else:
go = False
# ---- fin des instructions SQL
#Validation
connexion.commit()
#Déconnexion
connexion.close()