En savoir plus

Les bases de donnees

Apres le fichier CSV vient la base de donnees : la facon dont le monde entier range, retrouve et relie ses donnees. Avec un vrai moteur SQL a manipuler ici meme.

Du fichier CSV a la base de donnees#

Dans le cours, on a appris a ranger des donnees de trois facons de plus en plus solides :

temperature = 20.1 # une variable : une seule valeur en memoire [20.1, 21.5, 19.8] # une liste : plusieurs valeurs, mais ca disparait a la fermeture releves.csv # un fichier : ca survit, ca se partage

Le fichier CSV est deja un grand pas : les donnees restent sur le disque. Mais des qu'il grossit, des problemes apparaissent :

Avec un gros fichier CSV......le probleme
Chercher une ligne preciseIl faut tout relire du debut a chaque fois. Avec 10 millions de lignes, c'est lent.
Deux personnes ecrivent en meme tempsLes modifications s'ecrasent l'une l'autre.
Eviter les doublonsRien n'empeche d'ecrire deux fois le meme client.
Relier deux fichiersCroiser "clients.csv" et "commandes.csv" a la main est penible.

Une base de donnees est un logiciel concu exactement pour regler ces problemes : retrouver une ligne en un eclair, empecher les doublons, gerer plusieurs utilisateurs a la fois, et relier les donnees entre elles. C'est ce qui fait tourner ta banque, ton dossier scolaire, Instagram et le catalogue de la bibliotheque.

Anatomie d'une base : table, ligne, colonne, cle#

Bonne nouvelle : tu connais deja la structure de base. Une table de base de donnees, c'est exactement un tableau 2D comme ceux vus au jour des structures de donnees - des lignes et des colonnes.

nomdiametrelunestype
Terre127421tellurique
Mars67792tellurique
Jupiter13982095gazeuse

Le vocabulaire officiel :

TermeCe que c'estDans l'exemple
TableL'ensemble du tableau, avec un nomla table planetes
LigneUn enregistrement : une chose decriteune planete (ex. Mars)
ColonneUn champ : une caracteristique, toujours du meme typediametre (toujours un nombre)
Cle primaireLa colonne qui identifie chaque ligne sans ambiguitenom (deux planetes ne peuvent pas avoir le meme)
La cle etrangere : relier deux tables
Imagine une 2e table missions avec une colonne planete_visitee. En y mettant le nom d'une planete, chaque mission pointe vers une ligne de la table planetes. Ce pont entre deux tables s'appelle une cle etrangere, et c'est tout l'art du modele relationnel : ne jamais recopier une donnee, juste pointer vers elle.

Parler aux donnees : le langage SQL#

Pour interroger une base de donnees, on n'ecrit pas une boucle for : on decrit ce qu'on veut, et la base se debrouille pour le trouver vite. Ce langage s'appelle SQL (Structured Query Language). La requete la plus courante a trois morceaux :

SELECT nom, lunes # QUELLES colonnes afficher FROM planetes # DANS quelle table WHERE lunes > 5 # QUELLES lignes garder (filtre) ORDER BY lunes DESC # DANS quel ordre (optionnel)

Ca se lit presque comme de l'anglais : "selectionne le nom et les lunes, dans planetes, ou les lunes depassent 5, du plus grand au plus petit". Essaie par toi-meme : le moteur ci-dessous est un vrai interpreteur SQL qui tourne dans ta page.

Console SQL - table planetes

Colonnes : nom, diametre, lunes, type

Ce mini-moteur comprend SELECT, FROM, WHERE (avec =, !=, >, <, >=, <=, LIKE) et ORDER BY. Un vrai moteur en comprend bien plus (jointures, regroupements, calculs), mais l'idee est exactement celle-la.

SQLite : une base de donnees dans un seul fichier#

Il existe de gros moteurs qui tournent sur des serveurs dedies : PostgreSQL, MySQL, Oracle. Mais il en existe un, minuscule et genial, qui range toute la base dans un seul fichier sur ton disque : SQLite. Pas de serveur a installer, rien a configurer.

Et le plus beau : Python sait deja lui parler, sans rien installer, exactement comme pour csv et json au jour des fichiers. Le module s'appelle sqlite3 et il est dans la librairie standard.

import sqlite3 # Ouvre (ou cree) une base rangee dans un seul fichier connexion = sqlite3.connect("systeme-solaire.db") curseur = connexion.cursor() # La meme requete SQL qu'au-dessus, envoyee depuis Python curseur.execute("SELECT nom, lunes FROM planetes WHERE lunes > 5 ORDER BY lunes DESC") for ligne in curseur.fetchall(): print(ligne) # ('Saturne', 146), ('Jupiter', 95), ... connexion.close()
SQLite est partout sans qu'on le voie
Ton telephone, ton navigateur, beaucoup d'applications stockent leurs donnees dans un fichier SQLite. C'est l'un des logiciels les plus deployes de la planete - des milliards de copies. Et c'est exactement celui que Python ouvre en une ligne.

Astuce pont avec le jour des graphiques : tu peux lire une base avec sqlite3, recuperer les colonnes, et les passer directement a matplotlib pour tracer un graphique. Base de donnees + graphique = un mini tableau de bord scientifique.

Fichier plat ou base de donnees : que choisir ?#

Une base de donnees n'est pas toujours la bonne reponse. Pour quelques dizaines de lignes qu'on lit une fois, un CSV reste parfait. Voici comment trancher :

SituationLe bon outil
Petit jeu de donnees, lu d'un blocFichier CSV / JSON
Echange de donnees entre deux programmesFichier JSON
Beaucoup de lignes, recherches frequentesBase de donnees
Plusieurs utilisateurs en meme tempsBase de donnees
Donnees reliees entre elles (clients, commandes, produits)Base de donnees
Garder un historique fiable, sans doublonBase de donnees
Un peu d'histoire
Le modele relationnel (les donnees en tables reliees) a ete invente en 1970 par Edgar F. Codd, un chercheur d'IBM. L'idee etait si puissante qu'elle a donne naissance a SQL et domine encore aujourd'hui, plus de 50 ans plus tard. Codd a recu le prix Turing - l'equivalent du Nobel en informatique - pour ce travail.

En resume : la variable garde une valeur, la liste en garde plusieurs, le fichier les fait survivre, et la base de donnees les organise pour des milliers d'utilisateurs a la fois. Tu viens de monter tout l'escalier du rangement des donnees.