web-dev-qa-db-fra.com

Importer des données MYSQL à partir de csv à l'aide de LOAD DATA INFILE

J'importe des données de 20000 lignes d'un fichier CSV dans Mysql.

Les colonnes du fichier CSV sont dans un ordre différent de celui des colonnes de la table MySQL. Comment assigner automatiquement les colonnes correspondant aux colonnes de la table Mysql?

Quand j'exécute 

LOAD DATA INFILE'abc.csv' INTO TABLE abc

cette requête ajoute toutes les données à la première colonne. 

Veuillez suggérer une syntaxe automatique pour importer des données dans Mysql.

87
MANJEET

Vous pouvez utiliser la commande LOAD DATA INFILE pour importer le fichier csv dans la table. 

Vérifiez ce lien MySQL - LOAD DATA INFILE .

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);
135
Saharsh Shah

Vous devez probablement définir le FIELDS TERMINATED BY ',' ou le délimiteur.

Pour un fichier CSV, votre déclaration devrait ressembler à ceci:

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
45
ckim

Avant d'importer le fichier, vous devez préparer les éléments suivants:

  • Une table de base de données dans laquelle les données du fichier seront importées.
  • Un fichier CSV avec des données correspondant au nombre de colonnes de la table Et au type de données dans chaque colonne.
  • Le compte, qui se connecte au serveur de base de données MySQL, dispose des privilèges FILE Et INSERT.

Supposons que nous ayons le tableau suivant:

 enter image description here

CRÉER UNE TABLE À L'AIDE DE LA REQUÊTE SUIVANTE:

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);

VOTRE FICHIER CSV DOIT ÊTRE CORRECTEMENT FORMATÉ PAR EXEMPLE, VOIR CE QUI SUIT IMAGE ATTACHÉE:

 enter image description here

Si tout va bien .. Veuillez exécuter la requête suivante pour LOAD DATA FROM CSV FILE:

NOTE: Veuillez ajouter le chemin absolu de votre fichier CSV

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Si tout a été fait. vous avez exporté des données de CSV vers une table avec succès

44
Sunny S.M

Syntaxe:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] 
[LINES[TERMINATED BY 'string']] 
[IGNORE number {LINES | ROWS}]

Voir cet exemple:

LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
13
Md. Nashir Uddin

Insérer en bloc plus de 7000000 enregistrements en 1 minute dans la base de données (requête ultra-rapide avec calcul)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRP et RRP_nl et RRP_bl ne sont pas dans csv mais nous calculons cela et après l'insérons.

5
krunal panchal

supposons que vous utilisiez xampp et phpmyadmin 

vous avez le nom de fichier 'ratings.txt' le nom de table 'ratings' et le nom de base de données 'movies'

si votre xampp est installé dans "C:\xampp \" 

copiez votre fichier "ratings.txt" dans le dossier "C:\xampp\mysql\data\movies" 

LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

J'espère que cela pourra vous aider à omettre votre erreur si vous le faites sur localhost

2
Mohammad Arshi

J'obtenais le code d'erreur: 1290. Le serveur MySQL s'exécute avec l'option --secure-file-priv Il ne peut donc pas exécuter cette instruction. 

Cela a fonctionné pour moi sur Windows 8.1 64 bits en utilisant wampserver 3.0.6 64 bits.

Fichier my.ini modifié à partir de C:\wamp64\bin\mysql\mysql5.7.14

Supprimer l'entrée secure_file_priv c:\wamp64\tmp\(ou le répertoire que vous avez ici)

Tout arrêté - sortie de wamp etc. - et tout redémarré; puis punt mon fichier cvs sur C:\wamp64\bin\mysql\mysql5.7.14\data\u242349266_recur (le dernier répertoire étant le nom de ma base de données)

exécuté LOAD DATA INFILE 'monfichier.csv' 

Alumnos de la table 

ZONES TERMINÉES PAR ',' 

ENFERMÉ PAR '"'

LIGNES TERMINÉES PAR '\ r\n'

IGNOREZ 1 LIGNES

... et VOILA !!!

0
Carlos Garcia

Vous pouvez charger des données à partir d'un fichier csv ou texte . Si vous avez un fichier texte avec des enregistrements d'une table, vous pouvez charger ces enregistrements dans la table . Par exemple, si vous avez un fichier texte, chaque ligne est un enregistrement avec les valeurs de chaque colonne, vous pouvez charger les enregistrements de cette façon.

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

- exemple sur windows

LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'; 
0
Jorge T

Si vous exécutez LOAD DATA LOCAL INFILE à partir du shell Windows et que vous devez utiliser OPTIONALLY ENCLOSED BY '"', vous devrez procéder de la manière suivante pour échapper correctement les caractères:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out
0
Kikoz

Vous pouvez essayer d'insérer comme ceci: 

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);
0
Hozayfa