Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Bases de Datos » Importar CSV a MySQL Responder al tema
Nuevo tema


Página 1 de 1  [ 6 mensajes ] 
 
Nota 2011-01-26 16:10 @715

Perlero Nuevo
Registrado: 2011-01-25 13:10 @590
Mensajes: 4
Importar CSV a MySQL
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)
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
xxx,"yyyy","xxxx","y"
yyyy,"xxx","yyyy","xx"


Espero me puedan dar una ayuda.

¡Saludos!


Nota 2011-01-26 18:15 @802
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Importar CSV a MySQL
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


Nota 2011-01-27 09:14 @426

Perlero Nuevo
Registrado: 2011-01-25 13:10 @590
Mensajes: 4
Re: Importar CSV a MySQL
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
Syntax: [ Download ] [ Hide ]
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.  


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

Cod.2.-
Syntax: [ Download ] [ Hide ]
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.  


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


Nota 2011-01-27 15:54 @704
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Importar CSV a MySQL
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í:
Syntax: [ Download ] [ Hide ]
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');


El operador q() hace lo mismo que las comillas simples, pero sin mezclarse con ellas.

_________________
JF^D Perl programming


Nota 2011-03-22 09:39 @443

Perlero Nuevo
Registrado: 2011-01-25 13:10 @590
Mensajes: 4
Re: Importar CSV a MySQL
Gracias, explorer,

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


Syntax: [ Download ] [ Hide ]
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;


¡Saludos!


Nota 2011-03-22 12:17 @554

Perlero Frecuente
Registrado: 2011-01-22 12:56 @580
Mensajes: 118
Re: Importar CSV a MySQL
Otra opción habría sido escapar las comillas, supongo, no la he probado:

ENCLOSED BY '\"'


Responder al tema  [ 6 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO