CSV vers MySQL (correspondance des colonnes)

Par zorrito le 28 avril 2009 Ă  10:29 :: codage

mysql

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.

bdd_mysql

Voici celle de notre fichier texte.

csv

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 »

Articles similaires

Un commentaire Flux rss commentaires

Ajouter un commentaire ou faire un trackback

  • Le 19 juillet 2009 Ă  2:40 par Thomas

    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 :)

Laisser une réponse