2011-12-16 164 views
10

¿Hay alguna manera de importar múltiples archivos csv al mismo tiempo en una base de datos MySQL? ¿Algún tipo de importación por lotes?Cómo importar varios archivos csv en una base de datos MySQL

Estoy en Mac OSX con un servidor MAMP.

Tengo 185 archivos csv que necesito importar a una tabla MySQL. Puedo importarlos individualmente usando la pestaña de importación de phpMyAdmin, pero tomaría mucho tiempo. ¿Alguien sabe si hay una mejor manera?

Respuesta

7

Hay un pequeño script PHP para usted:

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

consulte el Manual de MySQL para LOAD DATA INFILE opciones que se ajustan a sus documentos.

+0

¿puede ser usado para permitir la primera fila de datos que se utilizará como los nombres de las columnas? –

10

utilizar un script de shell de la siguiente manera:

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

Hola nazar554, gracias por tu sugerencia. Desafortunadamente, recibo el mensaje de error "-bash: mysql: command not found". No estoy seguro de lo que estoy haciendo mal. – Laxmidi

+1

Además, está invocando mysql una vez para cada archivo, y eso es bastante inútil). – einpoklum

+0

¿Cómo harías esto recursivamente (con subdirectorios) –

3

Se puede usar un script de shell para recorrer los archivos (esto se supone que están en el directorio actual):

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

Hola Tom H, gracias por el mensaje. No sé nada sobre el uso de bash. Recibo este error en la Terminal: "-bash:: comando no encontrado". ¿Alguna idea de lo que estoy haciendo mal? Gracias. – Laxmidi

+0

Reemplace el shebang con el del script de nazar554 (#!/Usr/bin/env bash). Después de eso obtendrás el mismo error que obtuviste de él (mysql: comando no encontrado) ya que ambos le dimos la misma respuesta. Debe ejecutar esta secuencia de comandos en la misma máquina donde está alojada su base de datos (o usar el conmutador -h para conectarse de forma remota) y debe tener instalado el cliente de línea de comandos mysql. –

2

I 've modificado el guión de Tom para resolver algunos problemas que enfrentaron

#!/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 en lugar de load data infile: [archivo que va a cargarse era local al servidor MySQL]
  2. interruptores delimitador Agregado para que coincida con mis datos.
  3. --local-infile para habilitar el modo de carga de datos locales en el cliente.
0

@hlosukwakha que desea utilizar mysqlimport. esto busca una tabla llamada como el archivo. uso mysqlimport -help para encontrar los parámetros correctos, pero son básicamente idénticos a mysql

1

Para el uso de Windows del usuario este lote

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
  • negocio -> Tabla
  • IGNORE -> Ignorar inserción duplicado y el error de mantener a continuar
  • ~ dpnxf ->d para la letra de unidad, p de ruta a presentar, n de nombre de archivo, x para la extensión y F es variable de archivo

Pasos: - Ponga ese archivo por lotes en el directorio donde existen todos los archivos CSV múltiples y nombrado como something.bat - ejecutar cmd.exe como administrador y llamar a ese archivo something.bat y disfrutar de la importación ...

Cuestiones relacionadas