C6.4 : Utilisation des bases de données en python
Présentation succincte de la librairie sqlite3
Ouverture d'une connexion vers une base
import sqlite3
connexion = sqlite3.connect('base.db')
c = connexion.cursor()
La ligne 1 permet d'importer la librairie.
La ligne 2 ouvre une connexion avec la base de donnée.
La ligne 3 créé un objet cursor. Un tel objet permet :
- - de faire des requêtes sur la base ;
- - de parcourir les résultats de la requête.
Écriture d'une requête d'interrogation
A la suite du code précédent, l'exécution d'une requête se fait de la façon suivante :
c.execute('SELECT film, année FROM Films')
Une fois la requête exécutée, plusieurs actions sont possibles avec l'objet cursor :
- •
c.fetchone(): renvoie le contenu de l'enregistrement suivant sous la forme d'un tuple ; - •
c.fetchall(): renvoie l'ensemble des enregistrements sous forme d'une liste de tuples.
Voici un exemple utilisant fetchall() :
liste_resultats = c.fetchall()
for enregistrement in liste_resultats:
print(enregistrement)
Voici un autre exemple utilisant fetchone() :
enregistrement = c.fetchone()
while enregistrement != None:
print(enregistrement)
enregistrement = c.fetchone()
Dans les deux cas, une fois le traitement du résultat effectué, il est judicieux de détruire l'objet cursor.
c.close()
Écriture d'une requête de mise à jour ou de création
Que ce soit :
- - pour créer une base,
- - pour créer une table dans une base,
- - pour ajouter, supprimer ou modifier un enregistrement dans une table,
la démarche est la même :
c.execute("... requête ...")
connexion.commit()
Après la requête (ligne 6), il est nécessaire de mettre à jour le fichier de la base de données avec la ligne 7.
Fermeture de la la connexion vers la base
...
c = connexion.close()
Écriture d'une requête avec des variables
La méthode execute de l'objet cursor permet d'écrire des requêtes à partir de variables de façon sécurisée.
import sqlite3
connexion = sqlite3.connect("base.db")
c = connexion.cursor()
c.execute("CREATE table people (nom, age)")
nom1 = "Alfred"
age1 = 72
c.execute("INSERT INTO people VALUES (?, ?)", (nom1, age1))
c.commit()
con.close()
Ce qui peut également s'écrire de la façon suivante
import sqlite3
connexion = sqlite3.connect("base.db")
c = connexion.cursor()
c.execute("CREATE table people (nom, age)")
tuple_enreg = ("Alfred", 72)
c.execute("INSERT INTO people VALUES (?, ?)", tuple_enreg)
c.commit()
con.close()
Lien
Documentation officielle de la librairie sqlite3 : https://docs.python.org/fr/3/library/sqlite3.html.
Travail à faire
Créer un ensemble de fonctions qui permet de gérer des utilisateurs et leurs scores à un jeu (par exemple le chi/fou/mi écrit l'année dernière) à l'aide d'une base de données.