• Publicidad

Alta automática a BD de varios archivos CSV

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Alta automática a BD de varios archivos CSV

Notapor tutoki » 2014-09-29 05:25 @267

Hola. Quisiera automatizar una serie de altas en BD, estas altas se ejecutará desde varios archivos CSV y dependiendo del CSV van a una tabla u otra.

He pensado en hacer un for que tire de dos array, uno para los archivos CSV y otro para las TABLAS. Existe una concordancia entre el nombre del fichero y la tabla. Por ejemplo:

"trua_vm_mensual.csv" actualiza la tabla "tbl_vm_tru"
"trub_vm_mensual.csv" actualiza la tabla "tbl_vm_tru"
"cru_vm_mensual.csv" actualiza la tabla "tbl_vm_cru"
"lrua_vm_mensual.csv" actualiza la tabla "tbl_vm_lru"
"lrub_vm_mensual.csv" actualiza la tabla "tbl_vm_lru"

Este es código que funciona para una carga:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use warnings;
  2. use strict;
  3. use v5.10;
  4. use DBI;
  5.  
  6. my $dbh = DBI->connect('DBI:mysql:spadb;mysql_local_infile=1";host=localhost','XXXX','XXXXXX') or die "Connection Error: $DBI::errstr\n";
  7.  
  8. my $sql = q(LOAD DATA LOCAL INFILE 'D:/import/trub_vm_mensual.csv' REPLACE INTO TABLE `spadb`.`tbl_vm_tru` FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (@ColVar1, `TimeStamp`, `MetricId`, `Entity`) SET `Value` = REPLACE(REPLACE(@ColVar1, '.', ''), ',', '.'););
  9.  
  10. my $sth = $dbh->prepare($sql);
  11.  
  12. $sth->execute() or die "SQL Error: $DBI::errstr\n";
  13.  
  14. $sth->finish();
  15. $dbh->disconnect();
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Versión:
This is perl 5, version 18, subversion 2 (v5.18.2) built for MSWin32-x86-multi-thread-64int

Gracias por anticipado
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Publicidad

Re: Alta automática a BD de varios archivos CSV

Notapor explorer » 2014-09-29 07:55 @372

Yo veo que se puede hacer de dos maneras: o usando un hash, que devuelva el nombre de la tabla según el nombre del archivo CSV, o usando una expresión regular, extraemos el nombre de la tabla a partir del nombre del CSV:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($nombre_csv =~ /^(...)\w?_vm_mensual\.csv$/) {              # extraemos la raíz del nombre
  2.  
  3.         $nombre_tabla = $1 . '_vm_tru';                         # construimos el nombre de la tabla
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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


Volver a Básico

¿Quién está conectado?

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