CSV vers MySQL (correspondance des colonnes)
Par zorrito le 28 avril 2009 Ă 10:29 :: codage
Nous allons essayer d’apprendre Ă utiliser le LOAD DATA INFILE qui nous permet d’importer des bases de donnĂ©es en CSV ou mĂŞme texte dans notre base de donnĂ©e MySQL, de pouvoir insĂ©rer des dates qui sont au format français, des numĂ©ros de tĂ©lĂ©phone sĂ©parĂ©es par des espaces par exemple.
Imaginons la structure suivant pour notre base de donnée.

Voici celle de notre fichier texte.

Dans notre cas nous avons juste une inversion entre le nom et le téléphone.
Voici comment nous allons procéder.
LOAD DATA INFILE 'fichier.csv' INTO TABLE `prospects` FIELDS TERMINATED BY 't' ENCLOSED BY '' LINES TERMINATED BY 'rn' IGNORE 1 LINES (id,@telephone,nom,@date_naissance) SET date_naissance = DATE_FORMAT(STR_TO_DATE(@date_naissance,'%d/%m/%Y'),'%Y-%m-%d'), telephone = REPLACE(@telephone,' ','');
Je passe sur les diffĂ©rents paramètre comme FIELDS TERMINATED BY, ENCLOSED BY qui se comprennent très bien d’eux mĂŞme.
Si ce n’est pas le cas vous pouvez aller jeter un coup d’oeil Ă la documentation MySQL.
Quand nous faisons ceci (id,@telephone,nom,@date_naissance), cela signifie que nous allons insérer la première colonne de notre CSV dans le champs id de notre table prospects, la deuxième colonne dans le champs telephone, ainsi de suite.
Cela ne permet donc bien de pouvoir insérer des données qui ne respecteraient pas forcement la structure de notre base de donnée mysql.
Les @ prĂ©sents nous servent de “variables temporaires” afin de pouvoir faire des modifications sur les champs prĂ©sents dans notre CSV afin de les insĂ©rer dans notre base de donnĂ©e une fois transformĂ©e.
SET date_naissance = DATE_FORMAT(STR_TO_DATE(@date_naissance,'%d/%m/%Y'),'%Y-%m-%d')
Le code ci-dessus nous permet d’insĂ©rer dans notre base de donnĂ©e MySQL, une date qui Ă©tait au format français dans notre fichier CSV en format anglais.
telephone = REPLACE(@telephone,' ','')
Cela nous a permis d’insĂ©rer le tĂ©lĂ©phone qui possĂ©dait des espaces, dans notre champs tĂ©lĂ©phone (int 10).
J’espère que ces quelques petites astuces vous auront Ă©tĂ© nĂ©cessaires, vous devriez Ă prĂ©sent pouvoir insĂ©rer tout et n’importe quoi Ă partir de votre fichier txt ou csv.
1 commentaire »

Bonjour,
Merci pour l’explication de cette commande. Pour un projet en cours sur mon site, j’avais besoin d’importer des fichiers csv. Je passais par un soft, mais celui-vi buggait.
Grace Ă vos explications, non seulement j’ai rĂ©ussi (avec une difference de vitesse ENORME) mais j’ai pu automatiser le traitement via un script shell.
Merci encore et bonn continuation. Un petit control d sur votre site :)