web-dev-qa-db-fra.com

Comment insérer des colonnes sélectionnées d'un fichier CSV dans une base de données MySQL à l'aide de LOAD DATA INFILE

J'ai un fichier CSV qui contient 10 colonnes. Je souhaite sélectionner uniquement certaines colonnes de ce fichier et les charger dans une base de données MySQL à l'aide de la commande LOAD DATA INFILE.

66
Ugesh Gali

Chargez des données dans une table dans MySQL et spécifiez les colonnes:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;

@ col1,2,3,4 sont des variables pour contenir les colonnes du fichier csv (supposons 4) nom, id sont des colonnes de table.

101
ArK
LOAD DATA INFILE 'file.csv'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

Il vous suffit de remplacer column1, column2, etc. par vos noms de colonne et de placer @dummy partout où vous souhaitez ignorer une colonne du fichier CSV.

Détails complets ici .

37
Marc B

Indiquez le nom des colonnes dans le fichier CSV dans l'instruction infile de chargement.

Le code est comme ça:

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);

Ici, vous allez ajouter des données à seulement deux colonnes (vous pouvez les choisir avec le nom de la colonne) dans la table.

La seule chose à faire est de disposer d’un fichier CSV (filename.csv) avec deux valeurs par ligne. Sinon, merci de mentionner. J'ai une solution différente.

Je vous remercie.

24
Ataboy Josef

Exemple:

contenu du fichier ae.csv:

"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"

CREATE TABLE Tabletmp (  
    rec VARCHAR(9) 
);

Pour mettre seulement la colonne 3:

LOAD DATA INFILE '/local/ae.csv' 
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;


select * from Tabletmp;
    2016
    1982
    1986
    1400
9
Roberto Góes

si le nombre de colonnes de votre table de base de données est supérieur au nombre de colonnes de votre csv, vous pouvez procéder comme suit:

LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);
0
Abderrahmane

Pour ceux qui ont l'erreur suivante: 

Code d'erreur: 1290. Le serveur MySQL s'exécute avec le fichier Option --secure-file-priv afin qu'il ne puisse pas exécuter cette instruction

Vous pouvez simplement exécuter cette commande pour voir quel dossier peut charger des fichiers:

SHOW VARIABLES LIKE "secure_file_priv";

Après cela, vous devez copier les fichiers dans ce dossier et exécuter la requête avec LOAD DATA LOCAL INFILE au lieu de LOAD DATA INFILE.

0
Nicolas Bouvrette