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 partageLe 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 precise | Il faut tout relire du debut a chaque fois. Avec 10 millions de lignes, c'est lent. |
| Deux personnes ecrivent en meme temps | Les modifications s'ecrasent l'une l'autre. |
| Eviter les doublons | Rien n'empeche d'ecrire deux fois le meme client. |
| Relier deux fichiers | Croiser "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.
| nom | diametre | lunes | type |
|---|---|---|---|
| Terre | 12742 | 1 | tellurique |
| Mars | 6779 | 2 | tellurique |
| Jupiter | 139820 | 95 | gazeuse |
Le vocabulaire officiel :
| Terme | Ce que c'est | Dans l'exemple |
|---|---|---|
| Table | L'ensemble du tableau, avec un nom | la table planetes |
| Ligne | Un enregistrement : une chose decrite | une planete (ex. Mars) |
| Colonne | Un champ : une caracteristique, toujours du meme type | diametre (toujours un nombre) |
| Cle primaire | La colonne qui identifie chaque ligne sans ambiguite | nom (deux planetes ne peuvent pas avoir le meme) |
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 :
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
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.
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 :
| Situation | Le bon outil |
|---|---|
| Petit jeu de donnees, lu d'un bloc | Fichier CSV / JSON |
| Echange de donnees entre deux programmes | Fichier JSON |
| Beaucoup de lignes, recherches frequentes | Base de donnees |
| Plusieurs utilisateurs en meme temps | Base de donnees |
| Donnees reliees entre elles (clients, commandes, produits) | Base de donnees |
| Garder un historique fiable, sans doublon | Base de donnees |
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.