Skip to content

NSI - Terminale - Activité base de données

Travail demandé

Partie 1: construire des requêtes SQL

Pour réaliser cette partie, vous allez utiliser une machine virtuelle Linux-mint sur laquelle a été installée le Système de Gestion de Base De Données (SGBDD) MariaDB.
Démarrez la machine virtuelle Linux-mint ( regardez si nécessaire la vidéo de mise en place d'une machine virtuelle en cliquant sur ce lien ).

Question 1.1

  • Regardez la vidéo intitulée "requetes_terminal.mp4" en cliquant sur ce lien
    Avec le terminal, connectez vous au SGBDD MariaDB avec le compte nsiuser dont le mot de passe est nsiuser,
    puis demandez d'utiliser la base de données gestion__notes comme montré dans la vidéo.
  • Affichez les tables présentes dans la base de données gestion__notes.
  • Faites une capture d'écran de votre commande et de la réponse de la SGBDD que vous joindrez à votre compte rendu. .

Question 1.2

  • Afficher le contenu de la table PROFESSEUR.
  • Faites une capture d'écran de votre commande et de la réponse de la SGBDD que vous joindrez à votre compte rendu.
  • Saisissez la commande quit pour quitter la session.
  • Refermez le terminal.

Question 1.3

  • A partir de maintenant, vous allez utiliser le logiciel PHP myadmin . Regardez la vidéo "phpmyadmin.mp4" en cliquant sur ce lien
  • Écrivez une requête INSERT pour ajouter le devoir DS1 de la discipline NSI dans la table Devoir ( faîtes une capture d'écran à mettre dans le compte rendu).
  • Vérifiez que la requête s'est bien exécutée en consultant la table DEVOIR.
  • Faites une capture d'écran de votre commande et de la réponse de la SGBDD.

Question 1.4

  • Ecrivez une requête INSERT sur la table APPARTENIR pour ajouter les élèves Auboisdormant et Ozor en classe de 1G1.
  • Vérifiez que la requête s'est bien exécutée en consultant la table APPARTENIR.
  • Faites une capture d'écran de votre commande et de la réponse de la SGBDD.

Question 1.5

  • On vous donne ci-dessous la requête qui a permis de créer la table FAIRE.
    Cette table permet d'associer: une discipline, un devoir, un élève, la date du devoir et la note qu'a obtenue l'élève à ce devoir.

  • Précisez sur votre compte rendu les clés étrangères de la table FAIRE ainsi que sa clé primaire ( rappel: une clé primaire peut être constituée de plusieurs attributs qui sont souvent des clés primaires d'autres tables).

Question 1.6

  • Ecrivez la requête qui ajoute une note de 15.5, obtenue au devoir DS1 de mathématiques par l'élève Nordine Ozor. La note ayant été obtenue le 01/09/23 ce qui se note au format date SQL: ' 2023-09-01'
  • Ecrivez la requête qui ajoute une note de 13.5, obtenue au devoir DS2 de mathématiques par l'élève Nordine Ozor. La note ayant été obtenue le 19/09/23.
  • Vérifiez que vos requêtes se sont bien exécutées en consultant la table FAIRE.
  • Faites une capture d'écran de vos commandes et de la réponse de la SGBDD.

Question 1.7

  • Le prof de maths a oublié un point au devoir DS2 de mathématiques de l'élève Nordine Ozor, il faut donc mettre à jour la table FAIRE, pour remplacer la note de 13.5 par 14.5. Ecrivez la requête qui fait cette mise à jour.
  • Vérifiez que la requête s'est bien exécutée en consultant la table FAIRE.
  • Faites une capture d'écran de votre commande et de la réponse de la SGBDD.

Question 1.8

  • Ecrivez la requête qui calcule la moyenne de mathématiques de l'élève Nordine Ozor.

Question 1.9

  • Ecrivez la requête avec JOINTURE entre les tables AFFECTER et PROFESSEUR qui permet d'afficher le nom du professeur de mathématiques de la classe de 1G1.
  • Faites une copie de la requête et du résultat obtenu pour le compte rendu.

Question 1.10

  • Ecrivez la requête avec JOINTURE entre les tables APARTENIR et ELEVE qui permet d'afficher le nom et le prénom des élèves de seconde 1.
  • Faites une copie de la requête et du résultat obtenu pour le compte rendu.

Partie 2: interaction Python et Mysql

Dans cette partie vous allez créer une application python qui communique avec la base de données "gestion__notes", vous devez utiliser python dans la machine virtuelle.

Principe

Pour communiquer avec le SGBDD mysql depuis python, vous devez utilisez le module mysql.connector de python. Le code ci-dessous vous montre le principe, les commentaires en vert expliquent les lignes de code qui suivent:
NE PAS TESTER LE CODE, JUSTE LIRE LES COMMENTAIRES QUI EXPLIQUENT LE CODE POUR ESSAYER DE COMPRENDRE LE PRINCIPE

# importer le module mysql.connector:
import mysql.connector
# Pour éviter un plantage du code en cas d'erreur, on se connecte à la base avec une gestion d'exception bloc try-except
# bloc try
try: 
    # Création d'un objet connexion appelé cnx avec la méthode connect(...) de mysql.connector:
    # cnx donnera un accès à la base gestion__notes:
    cnx = mysql.connector.connect(user='nsiuser', password='nsiuser', database='gestion__notes')
    # Création d'un objet curseur appelé cursor avec la méthode cursor() de l'objet cnx.
    # Un objet curseur permet d'envoyer des requêtes SQL via sa méthode execute(...), 
    # l'objet curseur contient la réponse du SGBDD après une requête:
    cursor = cnx.cursor()
    # écriture d'une requête représentée par la variable la_requete
    # remarquez que la requête SQL est dans une chaîne de caractères:
    la_requete = "SELECT NOM_CLASS FROM CLASSE ORDER BY NOM_CLASS"
    # exécution de la requête avec la méthode execute(..)  de cursor:
    cursor.execute(la_requete)
    # comme résultat de la requête, on va recevoir une liste de tuples,
    # chaque tuple est une ligne de la table CLASSE, on va récupérer  le nom des classes dans les tuples,
    # les noms des classes seront stockés dans la liste python "liste_classes" qui au départ est créée vide:
    liste_classes = []
    # seul le premier terme de chaque tuple contient le nom de la classe, 
    # une boucle "for" parcourt un par un tous les tuples reçus par cursor,
    # durant l'exécution de la boucle, on ajoute l'élément 0 (premier terme du tuple) à la liste_classes:
    for element in cursor:
        liste_classes.append(element[0])
    # Affichage du contenu de la liste dans la console python:
    print(liste_classes)
    # Déconnexion de la base de données 
    cursor.close()
    cnx.close()
# gestion de l'exception si le try échoue
except mysql.connector.Error as error:
    print("Erreur base de données: {}".format(error))

Question 2.1

  • Lancez le logiciel VSCodium avec le raccourci du bureau de linux Mint:

    pb affichage

  • Sélectionnez le dossier Python-scripts du volet de gauche puis cliquez gauche sur test.py:

Copiez_collez, dans le fichier test.py, tout le code python donné dans la partie principe au dessus de la question 2.1 et ** BIEN vérifier l'indentation des blocs de code notamment au niveau des blocs try et except**.

Exécutez le code en cliquant sur la flèche en haut à gauche (entourée dans l'image ci-dessous):

pb affichage

Faites une copie du résultat obtenu dans la console. Concluez sur l'aptitude de python à communiquer à votre base de données.

Question 2.2

  • Modifiez la valeur de la chaîne affectée à la variable la_requete pour récupérer la liste des noms de disciplines ( cela revient à écrire une chaîne de caractères qui contient la requête SQL qui lit le champ NOM_DISC de la table DISCIPLINE), la ligne à modifier est:

1
2
# remarquez que la requête SQL est dans une chaîne de caractères affectée à la variable la_requete:
    la_requete = "SELECT NOM_CLASS FROM CLASSE ORDER BY NOM_CLASS"
Testez votre code, faites une copie du résultat obtenu pour le compte rendu.

Question 2.3

Vous allez maintenant voir comment récupérer plusieurs informations d'une table, par exemple, récupérons le nom et le prénom des professeurs. Vous remarquerez que le programme est similaire au précédent:

# importer le module mysql.connector:

import mysql.connector

# Pour éviter un plantage du code en cas d'erreur on se connecte à la base avec une gestion d'exception try-except

try:
    # Création d'un objet connexion appelé cnx avec la méthode connect(...) de mysql.connector:
    # cnx est connecté à la base gestion_notes:

    cnx = mysql.connector.connect(user='nsiuser', password='nsiuser', database='gestion__notes')
    # Création d'un objet curseur appelé cursor avec la méthode cursor() de l'objet cnx.
    cursor = cnx.cursor()
    # écriture d'une requête représentée par la variable la_requete

    la_requete = "SELECT NOM_PROF, PRENOM_PROF FROM PROFESSEUR ORDER BY NOM_PROF"

    # exécution de la requête avec la méthode execute(..)  de cursor:

    cursor.execute(la_requete)

    # comme résultat de la requête, on va recevoir une liste de tuples,
    # chaque tuple est une ligne de la table PROFESSEUR,
    # les noms et prénoms seront stockés dans la liste "liste_professeurs" qui au départ est vide:

    liste_professeurs = []

    # durant l'exécution de la boucle, on ajoute avec la méthode append() l'élément 0 (le nom) et l'élément 1 (le prénom) de chaque tuple
    # à la liste_professeurs:

    for element in cursor:
        print (element)
        liste_professeurs.append((element[0], element[1]))

    # Affichage du contenu de la liste dans la console python:

    print(liste_professeurs)
    # Déconnexion de la base de données 
    cursor.close()
    cnx.close()
    # gestion de l'exception
except mysql.connector.Error as error:
    print("Erreur base de données: {}".format(error))

Voici le résultat de l'exécution du code, cursor contient 5 tuples, le code les ajoute à la liste "liste_professeurs" avec l'itérateur for à la ligne 24, la liste est ensuite affichée avec un print à la ligne 29:

  • Modifiez le code précédent pour récupérer le nom et le prénom de tous les élèves que vous afficherez dans la console python.
  • Testez le code, faites une copie du résultat obtenu pour le compte rendu.

Question 2.4

  • Modifiez le code précédent pour récupérer uniquement le nom et le prénom des élèves de seconde 1 que vous afficherez dans la console python ( revoir votre réponse à la question 1.10).