Python et bases de données#

Dans cette partie, vous allez apprendre à utiliser Python pour accéder à une base de données et faire des requêtes SQL.

La base de données à disposition est représentée par le schéma relationnel suivant:

Schéma relationnel de la base de données music

Recherche de données dans la base de données#

La recherche de données se fait en deux étapes:

  • Connexion à la base de données (à effectuer une fois au début du programme):

    base_donnees = sqlite3.connect("nom_de_la_base")
    
  • Exécution de la requête de sélection

    resultats = base_donnees.execute("requete_selection")
    

Affichage des résultats#

Le résultat est une suite de lignes composées de tuples (structure similaire aux listes avec des parenthèses à la place des crochets). Il est donc possible d'afficher les lignes les unes après les autres à l'aide d'une boucle:

for resultat in resultats:
  print(resultat)

Le code ci-dessus affichera:

('Taylor Swift', 'United States', 'Big Machine Records')
('The Beatles', 'United States', NULL)
('Galantis', 'Sweden','Big Beat Records')
('Rihanna', 'Barbados', 'Def Jam Recordings')
('Alessia Cara', 'Canada', 'Def Jam Recordings')
('Khalid', 'United States', 'RCA Records')
('Coldplay', 'United Kingdom', 'Parlophone')

Comme chaque ligne fonctionne comme une liste, il est tout à fait possible d'accéder directement à chaque élément grace à son index:

for resultat in resultats:
  print("Nom:", resultats[0], "Pays:", resultats[1], "Label:", resultats[2])

Le code ci-dessus affichera:

Nom: Taylor Swift Pays: United States Label: Big Machine Records
...

Déconnexion à la base de données#

À la fin, il faut encore se déconnecter de la base de données.

base_donnees.close()

Exercice 1#

La base de données est disponible dans la fichier music.sqlite.

Le programme ci-dessous:

  • se connecte à la base de donnée,

  • exécute la requête select * from artist; et la stocke,

  • affiche le résultat ligne par ligne,

  • ferme la connexion à la base de données.

  1. Exécutez le code. Comment le résultat est-il affiché?

  2. Pour améliorer l'affichage du résultat, complétez le programme pour qu'il affiche les informations des artistes précédées du nom des colonnes (nom, pays et label). Exécutez votre code pour vérifier votre réponse.

import sqlite3

# Connexion à la base de données
base_donnees = sqlite3.connect("music.sqlite")

# Exécution de la requête
resultats = base_donnees.execute("select * from artist;")

# Affichage des résultats ligne par ligne :
for resultat in resultats:
  print(resultat)

# Déconnexion
base_donnees.close()

Exercice 2#

Écrivez le programme pour qu'il affiche la liste de tous les albums précédés du nom des colonnes (nom et année).


Exercice 3#

Écrivez le programme pour qu'il affiche la liste de toutes les chansons chantées par Taylor Swift.


Exercice 4#

Écrivez le programme pour qu'il affiche la liste de toutes les chansons, de leur interpète et le nom de l'album qui sont du genre hip-hop.


Ajout de données dans la base de données#

L'ajout de données se fait en trois étapes:

  • Connexion à la base de données (à effectuer une fois au début du programme):

    base_donnees = sqlite3.connect("nom_de_la_base")
    

    Par exemple:

    base_donnees = sqlite3.connect("music.sqlite")
    
  • Exécution de la requête d'ajout

    base_donnees.execute("requete_ajout")
    

    Par exemple:

    base_donnees.execute("insert into song values ('Leave Right Now', 2017, 'Life Changes', 'country');")
    
  • Écriture dans la base de données (à effectuer à la fin de toutes les requêtes)

    base_donnees.commit()
    

Exercice 5#

Écrivez un programme qui se connecte à la base de données et affiche la liste de toutes les chansons.

En complétant le code de l'étape précédente:

  1. Ajoutez dans la table song, la chanson Leave Right Now sortie en 2017 de l'album Life Changes de genre country.

  2. Ajoutez dans la table sings que la chanson Leave Right Now est chantée par Thomas Rhett.

  3. Affichez toutes les chansons chantées par Thomas Rhett pour vérifier que votre ajout a bien fonctionné.

Quand quelque chose qui n'existe pas dans la base de données est recherché, celle-ci retourne comme résultat une liste vide [].

Avant d'ajouter des informations dans une table, il est préférable de vérifier que ces informations n'y sont pas déjà.

if resultats > 0:
  # Ajout des informations
else:
  print("Ces informations existent déjà.")
  1. Ajoutez dans la table song, la chanson Blood sortie en 2017 de l'album DAMN. de genre hip-hop.

  2. Ajoutez dans la table sings que la chanson Blood est chantée par Kendrick Lamar.

  3. Affichez toutes les chansons chantées par Kendrick Lamar pour vérifier que votre ajout a bien fonctionné.

Essayez d'ajouter Kendrick Lamar des United States et du label Top Dawg Entertainment dans la table. Vous devriez recevoir comme message que "Ces informations existent déjà".