IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

import d'un fichier CSV


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut import d'un fichier CSV
    Bonjour;

    Je fais un export d'une valeur d'un champ d'une table dans un fichier CSV :
    mysql -u $SGBD_LOGIN -p$SGBD_PASSWORD -h $SGBD_ADDRESS -D $SGBD_DATABASE -e "SELECT DISTINCT option_value FROM dq_options WHERE option_name = 'XX_YY_options';" | tr '\t' ',' > ../export-option_name.csv

    Le fichier contient bien la bonne valeur : a:20:{s:14:"option_version";s:5:"0.9.2";s:7:"enabled";......

    Mais quand je fais l'import j'ai une message d'erreur de syntaxe MYSQL :

    cat ../export-option_name.csv \
    | awk '!/^\n/ {print "UPDATE dq_options SET option_value =(UPPER(\""$0"\")) WHERE option_name = 'XX_YY_options';"}' \
    | mysql -u $SGBD_LOGIN -p$SGBD_PASSWORD -h $SGBD_ADDRESS -D $SGBD_DATABASE

    Comment je peux faire sur l'export pour MYSQL n'interprete pas les "" (la commande JSON) ?

    Merci

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 888
    Par défaut
    Salut yanis97.

    Je fais cela en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
     
    chcp 1252 > nul
     
    set PATH=.;F:\Wamp\bin\mysql\mysql5.6.26\bin\;%PATH%
     
    mysql < test.sql  --verbose  --force
    @echo.
    pause
    exit
    Je te donne deux exemples différents mais toujours avec un fichier de type csv.

    Pour exporter ma table 'sample' vers un fichier 'export.txt' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Use `base`;
     
    SELECT *
       INTO OUTFILE 'export.txt'
       FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
       LINES  TERMINATED BY '\n'
    FROM `sample`;
    Et pour importer depuis un fichier 'import.txt' vers la table 'cities' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Use `base`;
     
    LOAD DATA LOCAL INFILE 'Fichier.txt'
    	INTO TABLE `Cities`
        CHARACTER SET latin1
    	FIELDS	TERMINATED BY ','
    			ENCLOSED   BY '"'
    			ESCAPED    BY '\\'
    	LINES	TERMINATED BY '\n'
        IGNORE 0 LINES
        (@F1, @F2, @F3, @F4, Population, Latitude, Longitude, @F8)
    	set Country    = trim(@F1),
    	    City       = trim(@F2), 
    	    AccentCity = trim(@F3),
    	    Region     = trim(@F4),
    		Date       = outils.chgdate(@F8);
    @+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut yanis97.

    Je fais cela en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
     
    chcp 1252 > nul
     
    set PATH=.;F:\Wamp\bin\mysql\mysql5.6.26\bin\;%PATH%
     
    mysql < test.sql  --verbose  --force
    @echo.
    pause
    exit
    Je te donne deux exemples différents mais toujours avec un fichier de type csv.

    Pour exporter ma table 'sample' vers un fichier 'export.txt' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Use `base`;
     
    SELECT *
       INTO OUTFILE 'export.txt'
       FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
       LINES  TERMINATED BY '\n'
    FROM `sample`;
    Et pour importer depuis un fichier 'import.txt' vers la table 'cities' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Use `base`;
     
    LOAD DATA LOCAL INFILE 'Fichier.txt'
    	INTO TABLE `Cities`
        CHARACTER SET latin1
    	FIELDS	TERMINATED BY ','
    			ENCLOSED   BY '"'
    			ESCAPED    BY '\\'
    	LINES	TERMINATED BY '\n'
        IGNORE 0 LINES
        (@F1, @F2, @F3, @F4, Population, Latitude, Longitude, @F8)
    	set Country    = trim(@F1),
    	    City       = trim(@F2), 
    	    AccentCity = trim(@F3),
    	    Region     = trim(@F4),
    		Date       = outils.chgdate(@F8);
    @+

    Bonjour;

    Malheuresement je ne peux pas utiliser la commande LOAD DATA LOCAL à cause de ma version de MYSQL.
    D'ou la galère pour importer le fichier CSV et utiliser un autre moyen.

    Merci

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 888
    Par défaut
    Salut yanis97.

    Je voie que tu utilises 'awk'. Es-tu sous linux (je veux dire debian) ?
    Et qu'elle est la version mysql que tu utilises ?
    Je peux éventuellement faire une recherche sur une possible solution à chargement.
    Mais cela sera testé sous windows.

    @+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut
    Salut;

    Oui je suis sous linux et pour MYSQL c'est la version 5.6.
    Sinon si tu as une autre solution même testée sous windows pas grave je pourrais l'adapter pour la lancer sous Linux.

    Merci

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 888
    Par défaut
    Salut Yanis97.

    Citation Envoyé par Yanis97
    Malheureusement je ne peux pas utiliser la commande LOAD DATA LOCAL à cause de ma version de MYSQL.
    J'ai la version MySql 5.6.26 ! J'utilise le 'load data local' depuis longtemps et sans problème. Et je ne comprends pas bien vos difficultés avec 'load data local'.

    Avez-vous essayé d'adapter l'exemple que j'ai donné ?

    CSV signifie 'Comma-separated values', c'est-à-dire que la virgule est le caractère séparateur des valeurs.

    Vous devez d'abord définir comment vous allez interpréter ce que vous mettez dans le fichier 'csv'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FIELDS TERMINATED BY ','
    La virgule est le caractère qui sépare les différentes valeurs dans la ligne du fichier 'CSV'.

    Les guillemets servent à encadrer les valeurs.

    L'anti-slash sert à définir le caractère d'échapement lorsqu'on veut qu'un caractère ne soit pas interpréter autrement.

    Par exemple aujourd'hui s'écrit ainsi : "aujourd\'hui".
    L'apostrophe risque d'être interprété comme une marque de début ou de fin de chaine de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LINES  TERMINATED BY '\r\n'
    Ceci est le saut de ligne qui marque la fin de la ligne dans le fichier 'CSV'.

    Votre fichier doit être structué ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "1","un"
    "2","deux"
    "3","aujourd\'hui"
    Si par inadvertance, dans une chaîne de caractères, vous avez une virgule, vous avez deux solutions possibles :
    1) mettre un anti-slash devant la virgule afin qu'elle ne soit pas interprété comme séparateur des valeurs.
    2) mettre autre chose, comme un point-virgule, à la condition que ce caractères ne se retrouvent pas dans vos chaînes de caractères.

    Sinon, il existe un utilitaire qui permet de faire un 'load data local' : c'est MySqlImport.
    En ligne de commande, donc sous windows, voici un exemple de paramétrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqlimport  --verbose  --force  --delete  --fields-optionally-enclosed-by=\"  --fields-terminated-by=,  --fields-escaped-by=\\  --lines-terminated-by=\r\n  --local  base  test.txt
    Le nom de ma base de données se nomme 'base'. Oui, je sais, c'est pas très original.
    Le nom du fichier 'test' à charger doit être aussi celui de la table mysql.
    Sous windows, la fin de ligne est '\r\n'. Sous linux, je suppose que c'est '\n'.

    @+

Discussions similaires

  1. Importation d'un fichier .csv vers MySQL
    Par xenos dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/08/2007, 10h19
  2. Réponses: 9
    Dernier message: 12/06/2007, 11h02
  3. [Wamp] Problème à l'import d'un fichier csv
    Par Pokerstar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 25/05/2007, 09h15
  4. Pb d'import d'un fichier .csv
    Par clodius dans le forum Access
    Réponses: 2
    Dernier message: 17/04/2007, 10h18
  5. importation d'un fichier csv
    Par bidson dans le forum XMLRAD
    Réponses: 14
    Dernier message: 22/12/2005, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo