Bases de données - sqlite3

Les bases de données peuvent être un moyen efficace de mémoriser des données, surtout si elles se structurent naturellement sous forme de table.

La base de données se présentera physiquement sous la forme d’un fichier de type sq3 sur le disque dur.

Il sera possible de compléter, de modifier et bien sûr de lire le contenu de la base de données.

Une base de donnée peut contenir plusieurs tables.

Chaque table est composée de multiple lignes ayant la même structure.

Prérequis :

  • les chaînes de caractères
  • les listes

Importation du module sqlite

Création d’une base de donnée

  1. Connexion à la base de données:

    connexion = sqlite3.connect("bd-celebrites.sq3")
    

Cette instruction crée la base si elle n’existe pas encore (le fichier est créé dans le répértoire courant).

  1. Création d’un curseur sur la base:

    curseur = connexion.cursor()
    

Le curseur servira ensuite à manipuler la base de données.

Dans toute la suite, on exécute des commandes SQL (données sous forme de chaînes de caractères).

  1. Création d’une table dans la base:

    curseur.execute("CREATE TABLE IF NOT EXISTS celebrites (nom TEXT, prenom TEXT, annee INTEGER)")
    

La commande crée la table “celebrite” si elle n’existe pas encore. On définit sa structure au moment de sa création : chaque ligne de la table est constituée d’un nom, d’un prénom et d’une année.

  1. Ajout de données à la table:

    curseur.execute("INSERT INTO celebrites(nom, prenom, annee) VALUES('Turing','Alan', 1912)")
    curseur.execute("INSERT INTO celebrites(nom, prenom, annee) VALUES('Lovelace','Ada', 1815)")
    curseur.execute("INSERT INTO celebrites(nom, prenom, annee) VALUES('Shannon','Claude', 1916)")
    curseur.execute("INSERT INTO celebrites(nom, prenom, annee) VALUES('Hooper','Grace', 1906)")
    
  2. Valider l’enregistrement dans la base:

    connexion.commit()
    

Avertissement

Sans cette instruction rien ne sera réellement enregistré dans la base de données.

  1. Fermer la base:

    connexion.close()
    

Lecture de la base de données

connexion = sqlite3.connect("bd-celebrites.sq3")
curseur   = connexion.cursor()

curseur.execute("SELECT * FROM celebrites")
resultat  = curseur.fetchall()

La liste resultat contient alors tous les enregistrements.

Modifier un enregistrement

connexion = sqlite3.connect("bd-celebrites.sq3")
curseur   = connexion.cursor()

curseur.execute("UPDATE celebrites SET prenom='Alan Mathison' WHERE nom='Turing'")
connexion.commit()

Pour aller un peu plus loin

  1. Une requête de recherche ciblée:

    curseur.execute("SELECT * FROM celebrites WHERE nom = 'Turing'")
    resultat = list(curseur)
    print(resultat)
    

La requête recherche et extrait seulement les lignes de la table dont l’entrée [nom] est ‘Turing’. On transforme (transtype) le curseur en liste avant de l’afficher en tant que résultat.

  1. Utiliser une variable dans une requete:

    qui = "Shannon"
    curseur.execute("SELECT * FROM celebrites WHERE nom = '" + qui + "'")
    quand = 1515
    curseur.execute("SELECT * FROM celebrites WHERE annee >= " + str(quand))
    

Exemple complet

import sqlite3
connexion = sqlite3.connect("bd-celebrites.sq3")
curseur = connexion.cursor()

# creation d'une table
curseur.execute("CREATE TABLE IF NOT EXISTS celebrites (nom TEXT, prenom TEXT, annee INTEGER)")

# ajout de données à la base
curseur.execute("INSERT INTO celebrites(nom, prenom) VALUES('Turing','Alan', ???)")
curseur.execute("INSERT INTO celebrites(nom, prenom) VALUES('Lovelace','Ada')")
curseur.execute("INSERT INTO celebrites(nom, prenom) VALUES('Shannon','Claude')")
curseur.execute("INSERT INTO celebrites(nom, prenom) VALUES('Hooper','Grace')")

# valider l'enregistrement dans la base
connexion.commit()

# charger toutes les données de la base dans un tableau
curseur.execute("SELECT * FROM celebrites")
resultat = curseur.fetchall()

# affichage en console du résultat
print(resultat)
for r in resultat:
    print(r[0],r[1],r[2])

# Modifier un enregistrement
curseur.execute("UPDATE celebrites SET prenom='Alan Mathison' WHERE nom='Turing'")
connexion.commit()

# Accèder à l'enregistrement
curseur.execute("SELECT * FROM celebrites WHERE nom = 'Turing'")
resultat = list(curseur)
print(resultat)

# fermer la base
connexion.close()