Allez, on se lance enfin dans la préparation des tables pour l'import massif de données depuis des fichiers CSV. Si tu te dis : "Mais pourquoi préparer la table ? C'est pas compliqué, non ?", alors tu vas vite découvrir la vraie vie. Aucun fichier n'est jamais "parfait". Il y a toujours un petit truc qui cloche — des doublons, des espaces en trop, des erreurs de types de données ou juste une structure qui ne colle pas.
Voyons comment bien préparer ta base pour que le fichier CSV s'importe sans galère.
Avant d'importer un fichier CSV, décide comment les données vont être stockées dans la base. Ça veut dire qu'il faut d'abord créer une table avec la bonne structure.
Exemple : import de données sur les étudiants
Imaginons qu'on a un fichier CSV students.csv avec des infos sur les étudiants. Son contenu ressemble à ça :
id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics
À partir de ça, on crée la table :
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- Identifiant unique de l'étudiant
name VARCHAR(100) NOT NULL, -- Prénom de l'étudiant (chaîne jusqu'à 100 caractères)
age INT CHECK (age > 0), -- Âge de l'étudiant (doit être supérieur à 0)
email VARCHAR(100) UNIQUE, -- Email unique
major VARCHAR(100) -- Spécialité principale
);
id SERIAL PRIMARY KEY: On a ajouté une clé primaire pour identifier chaque ligne de façon unique. Si ton CSV a déjà des identifiants uniques, utilise la colonneiddu fichier.name VARCHAR(100) NOT NULL: Le prénom de l'étudiant doit être renseigné, et limité à 100 caractères.age INT CHECK (age > 0): L'âge doit être un nombre, et on vérifie qu'il est toujours supérieur à 0.email VARCHAR(100) UNIQUE: L'email doit être unique, pour éviter les doublons.major VARCHAR(100): Indique la spécialité principale de l'étudiant. Pas de contrainte ici.
Ta table doit être bien pensée pour coller à tes données et en même temps te protéger contre les données foireuses. Ça réduit les erreurs à l'import.
Vérification des données avant l'import
Les fichiers CSV réservent souvent des surprises. Avant d'importer, assure-toi que les données collent à la structure de la table.
Comment vérifier les données ?
Correspondance des colonnes
Vérifie que le nombre de colonnes dans le CSV correspond à celui de la table. Par exemple, si la table a 5 colonnes et le CSV en a 6, l'import va planter.Types de données
Vérifie que les données de chaque colonne sont du bon type. Par exemple, dans la colonneageil ne doit y avoir que des entiers.
Outils pour la validation
Excel ou Google Sheets. Ouvre le fichier dans un tableur et vérifie qu'il n'y a pas de lignes vides ou de cellules avec des données bizarres.
Python. Utilise la librairie pandas pour checker les types de données :
import pandas as pd
# On lit le CSV
df = pd.read_csv('students.csv')
# On vérifie les données
print(df.dtypes) # Affiche les types de données pour chaque colonne
print(df.isnull().sum()) # Vérifie les valeurs manquantes
Nettoyage des données avant l'import
La plupart du temps, les données venant de l'extérieur ont besoin d'un bon nettoyage. Sinon, tu risques d'avoir des erreurs à l'import.
Problèmes classiques avec les fichiers CSV
Lignes ou colonnes vides
Si une valeur manque dans une colonne obligatoire (NOT NULL), ça va planter.
Exemple de données incorrectes :
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
Solution : Remplace les valeurs manquantes par des valeurs valides. Par exemple, mets NULL à la place d'un age vide.
Espaces en trop
Les espaces au début ou à la fin des chaînes peuvent poser problème. Par exemple, "Alex" et "Alex " seront considérés comme différents.
Solution en Python : enlève les espaces en trop.
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
Caractères incorrects ou encodage
Si le fichier contient des caractères spéciaux incompatibles avec la base, l'import peut échouer.
Exemple : Utilise l'outil iconv pour convertir l'encodage :
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
Nettoyage des données : exemple avec Python
import pandas as pd
# On lit le fichier
df = pd.read_csv('students.csv')
# On nettoie les données
df['name'] = df['name'].str.strip() # On enlève les espaces
df['email'] = df['email'].str.lower() # On met les emails en minuscules
df['age'] = df['age'].fillna(0) # On remplit les âges manquants avec 0
df['age'] = df['age'].astype(int) # On convertit l'âge en entier
# On sauvegarde dans un nouveau fichier
df.to_csv('cleaned_students.csv', index=False)
Vérifie toujours tes données avant d'importer. Rappelle-toi : un bon dev se fait gagner du temps en trouvant les problèmes à l'avance !
Checklist utile pour préparer tes tables et tes données
Avant de bosser avec un CSV, vérifie :
- La structure de la table colle aux données (colonnes, types, contraintes).
- Le fichier CSV n'a pas de lignes vides, d'espaces en trop ou de caractères bizarres.
- L'encodage du fichier est compatible avec PostgreSQL (UTF-8, c'est le top).
- Tu utilises des outils pour analyser et nettoyer les données (genre Python, Excel).
Maintenant tu es prêt à importer des données depuis un CSV ! Mais avant de te lancer, assure-toi que ta table est bien structurée et que tes données sont clean. Dans la prochaine leçon, on verra comment importer dans PostgreSQL, gérer les erreurs et les conflits.
GO TO FULL VERSION