2011-12-16 28 views
10

C'è un modo per importare più file csv contemporaneamente in un database MySQL? Qualche tipo di importazione in lotti?Come importare più file CSV in un database MySQL

Sono su Mac OSX che esegue un server MAMP.

Ho 185 file CSV che devo importare in una tabella MySQL. Posso importarli individualmente usando la scheda di importazione di phpMyAdmin, ma ci vorrebbe molto tempo. Qualcuno sa se c'è un modo migliore?

risposta

7

C'è un piccolo script PHP per voi:

#!/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"); 
} 

consultare il manuale di MySQL per LOAD DATA INFILE opzioni che si adattano i vostri documenti.

+0

Può essere utilizzato per consentire la prima riga di dati da utilizzare come nomi di colonna? –

10

utilizzare uno script di shell come questo:

#!/usr/bin/env bash 
cd yourdirectory 
for f in *.csv 
do 
     mysql -e "USE yourDatabase LOAD DATA LOCAL INFILE '"$f"'INTO TABLE yourtable" 
done 
+1

Ciao nazar554, grazie per il tuo suggerimento. Sfortunatamente, ricevo il messaggio di errore "-bash: mysql: comando non trovato". Non sono sicuro di cosa sto sbagliando. – Laxmidi

+1

Inoltre, stai invocando mysql una volta per ogni file, e questo è abbastanza dispendioso). – einpoklum

+0

Come lo faresti in modo ricorsivo (con sottodirectory) –

3

È possibile utilizzare uno script di shell per scorrere i file (questo presuppone che siano nella directory corrente):

#!/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 
+0

Ciao Tom H, Grazie per il messaggio. Non so nulla sull'utilizzo di bash. Sto ricevendo questo errore nel terminale: "-bash:: comando non trovato". Qualche idea su cosa sto facendo male? Grazie. – Laxmidi

+0

Sostituisci lo shebang con quello dello script di nazar554 (#!/Usr/bin/env bash). Dopodiché avrai lo stesso errore che hai ricevuto dal suo (mysql: comando non trovato) dal momento che entrambi abbiamo avuto la stessa risposta. È necessario eseguire questo script sulla stessa macchina in cui è ospitato il database (o utilizzare l'opzione -h per connettersi in remoto) e deve avere installato il client della riga di comando mysql. –

2

I 'Ho script originale di Tom per risolvere alcuni problemi che si affacciavano

#!/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 
  1. load data local infile anziché load data infile: [il file da caricare era locale sul server mysql]
  2. Aggiunti gli interruttori delimitatore per abbinare i miei dati.
  3. --local-infile per abilitare la modalità di caricamento dei dati locali sul client.
0

@hlosukwakha che si desidera utilizzare mysqlimport. cerca una tabella denominata come il file. uso mysqlimport -help per trovare i parametri corretti, ma sono sostanzialmente identiche a mysql

1

Per l'uso di Windows User questo lotto

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 
) 
  • email_us -> DB
  • di business -> Tabella
  • IGNORE -> Ignora l'inserto duplicato e in caso di errore continua continua
  • ~ dpnxf ->d per lettera di unità, p per il percorso di file, n per nome del file, x per l'estensione e F è variabile del file

Passi: - Metti che file batch nella directory in cui esistono tutti i file csv multiple e la chiamò come something.bat - eseguire cmd.exe come adminstrator e chiamare quel file something.bat e godersi l'importazione ...

Problemi correlati