Est-il possible d'importer plusieurs fichiers csv simultanément dans une base de données MySQL? Une sorte d'importation par lots?
Je suis sous Mac OSX sur un serveur MAMP.
J'ai 185 fichiers CSV que je dois importer dans une table MySQL. Je peux les importer individuellement en utilisant l'onglet d'importation de phpMyAdmin, mais cela prendrait beaucoup de temps. Est-ce que quelqu'un sait s'il y a un meilleur moyen?
Utilisez un script Shell comme ceci:
#!/usr/bin/env bash
cd yourdirectory
for f in *.csv
do
mysql -e "USE yourDatabase LOAD DATA LOCAL INFILE '"$f"'INTO TABLE yourtable"
done
Il y a un petit script PHP pour vous:
#!/usr/bin/php
<?
mysql_connect('localhost','root','root'); // MAMP defaults
mysql_select_db('yourdatabase');
$files = glob('*.csv');
foreach($files as $file){
mysql_query("LOAD DATA INFILE '".$file."' INTO TABLE yourtable");
}
Consultez le manuel de MySQL pour LOAD DATA INFILE les options qui correspondent à vos documents.
Vous pouvez utiliser un script Shell pour parcourir les fichiers (celui-ci suppose qu'ils se trouvent dans le répertoire en cours):
#!/bin/bash
for f in *.csv
do
mysql -e "load data infile '"$f"' into table my_table" -u username --password=your_password my_database
done
J'ai modifié le script de Tom pour résoudre quelques problèmes rencontrés
#!/bin/bash
for f in *.csv
do
mysql -e "load data local infile '"$f"' into table myTable fields TERMINATED BY ',' LINES TERMINATED BY '\n'" -u myUser--password=myPassword fmeter --local-infile
done
load data local infile
au lieu de load data infile
: [le fichier à charger était local sur le serveur mysql]--local-infile
pour activer le mode de chargement de données local sur le client.Pour l'utilisateur Windows, utilisez ce lot
echo off
setlocal enabledelayedexpansion
FOR %%f IN ("*.csv") DO (
set old=%%~dpnxf
set new=!old:\=\\!
mysql -e "load data local infile '"!new!"' IGNORE into table email_us.business COLUMNS TERMINATED BY ','" -u root
echo %%~nxf DONE
)
d
pour la lettre du lecteur, p
pour le chemin du fichier, n
pour le nom du fichier, x
pour l’extension et f est une variable de fichierÉtapes: - Placez ce fichier de commandes dans un répertoire contenant tous les fichiers csv et nommez-le sous le nom quelquechose.bat - exécutez cmd.exe en tant qu’administrateur et appelez-le. ..
@hlosukwakha vous voulez utiliser mysqlimport
. ceci recherche une table nommée comme le fichier. utilisez mysqlimport -help
pour trouver les paramètres corrects, mais ils sont fondamentalement identiques à mysql
.
En python, vous pouvez utiliser d6tstack , ce qui rend cela simple
import d6tstack
import glob
c = d6tstack.combine_csv.CombinerCSV(glob.glob('*.csv'))
c.to_mysql_combine('mysql+mysqlconnector://usr:pwd@localhost/db', 'tablename')
Il traite également avec data changes schema , crée une table et vous permet de prétraiter les données.