• Publicidad

Importar CSV a MySQL

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Importar CSV a MySQL

Notapor shalo » 2011-01-26 16:10 @715

Buenas tardes,

No he podido encontrar información sobre cómo importar un archivo .csv a una base de datos MySQL a través de algún programilla en Perl.

Logro hacer la conexión a la base de datos pero no logro importar el archivo .csv .

El archivo .csv no posee encabezado (titulo de columna); solo son datos delimitados por ",". Si lo importo de forma manual a MySQL no ocurre problemas.

(El archivo se puede modificar sin problemas para una posible solución)
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
xxx,"yyyy","xxxx","y"
yyyy,"xxx","yyyy","xx"
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Espero me puedan dar una ayuda.

¡Saludos!
shalo
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-01-25 13:10 @590

Publicidad

Re: Importar CSV a MySQL

Notapor explorer » 2011-01-26 18:15 @802

Bienvenido a los foros de Perl en Español, shalo.

Sería interesante ver los intentos que has hecho.

En CPAN hay módulos para leer ficheros CSV y pasarlos a varios formatos. Acabo de hacer una búsqueda y me sale, por ejemplo, el Text::CSV::Slurp, que lee un fichero y lo pasa a un array de hashes, con lo que luego es relativamente fácil llevarlo a MySQL.

De todas maneras, en Duck Duck Go tienes unos enlaces a esa cuestión.

Comentan la forma de crear la tabla a partir de la información de la primera línea, y luego lanzar una sentencia como esta al MySQL, para que se encargue él de la importación de los datos:

LOAD DATA INFILE 'data.csv' FIELDS TERMINATED BY ',' INTO TABLE MYTABLE;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Importar CSV a MySQL

Notapor shalo » 2011-01-27 09:14 @426

Gracias por la bienvenida, explorer :)

En realidad estoy empezando con esto de Perl y con esto estoy intentando automatizar algunos procesos para mejorar algunas cosas de a poco.

He intentado con algunas líneas.

Cod.1
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use DBI;
  2.  
  3. #Datos de la conexión
  4.  $db="database";
  5.  $host="localhost";
  6.  $port="3306";
  7.  $userid="root";
  8.  $passwd="";
  9.  $connectionInfo="DBI:mysql:database=$db;$host:$port";
  10.  $dbh="";
  11.  $mysql="";
  12.  
  13. # Realizamos la conexión a la base de datos
  14. $dbh = DBI->connect($connectionInfo,$userid,$passwd);
  15.  
  16. $mysql->query(qq{LOAD DATA LOCAL INFILE 'C:/archivo.csv' INTO TABLE tabla FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'});
  17. if ($mysql->is_error) {
  18.     my $DBError = $mysql->get_error_message;
  19.     print "MySQL Error : $DBError    \n";
  20. }
  21. $mysql->close;
  22.  
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


error: can't call method "query" without a package or object reference at test.pl ñine 18

Cod.2.-
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2.  
  3.    use DBI;
  4. #Datos de la conexión
  5. my $db="database";
  6. my $host="localhost";
  7. my $port="3306";
  8. my $userid="root";
  9. my $passwd="";
  10. my $connectionInfo="DBI:mysql:database=$db;$host:$port";
  11. my $dbh="";
  12. my $mysql="";
  13.  
  14.  
  15. # Realizamos la conexión a la base de datos
  16. $dbh = DBI->connect($connectionInfo,$userid,$passwd);
  17.  
  18. my $myquery = "LOAD DATA LOCAL INFILE 'C:archivo.csv' INTO TABLE tabla FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'";
  19.  
  20. # EXECUTE THE QUERY FUNCTION
  21. $execute = $dbh->query($myquery);
  22.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


error: syntac error at line 18, near "' LiNES TERMINATED BY '"
Bad name after n' at test2.pl line 18


En realidad no sé si voy bien encaminado, pero estoy haciendo el intento. :)

Saludos y gracias de antemano
shalo
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-01-25 13:10 @590

Re: Importar CSV a MySQL

Notapor explorer » 2011-01-27 15:54 @704

Del primer código, te dice que $mysql no contiene ningún objeto, y viendo el código, efectivamente, $mysql no contiene nada. Es $dbi el que contiene el objeto de la conexión a la base de datos.

Y del segundo código, el mensaje de error se refiere a que hay un lío con las comillas.

Prueba así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $myquery = q(LOAD DATA LOCAL INFILE 'C:/archivo.csv' INTO TABLE tabla FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El operador q() hace lo mismo que las comillas simples, pero sin mezclarse con ellas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Importar CSV a MySQL

Notapor shalo » 2011-03-22 09:39 @443

Gracias, explorer,

por si alguien le sirve, al final lo hice de la siguiente forma y resulto todo bien. :)


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use DBI;
  4.  
  5. $dbh = DBI->connect('DBI:mysql:database;host=localhost','root','')
  6.  
  7. or die "Connection Error: $DBI::errstr\n";
  8.  
  9. $sql = q(LOAD DATA LOCAL INFILE '/home/xxx/yyy/data/archivo.csv' INTO TABLE tabla FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';);
  10.  
  11. $sth = $dbh->prepare($sql);
  12.  
  13. $sth->execute
  14.  
  15. or die "SQL Error: $DBI::errstr\n";
  16.  
  17. $sth->finish;
  18. $dbh->disconnect;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡Saludos!
shalo
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-01-25 13:10 @590

Re: Importar CSV a MySQL

Notapor pvaldes » 2011-03-22 12:17 @554

Otra opción habría sido escapar las comillas, supongo, no la he probado:

ENCLOSED BY '\"'
pvaldes
Perlero nuevo
Perlero nuevo
 
Mensajes: 129
Registrado: 2011-01-22 12:56 @580


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados