lunes, 9 de septiembre de 2013

Conexión a base de datos Mysql con el Módulo DBI de Perl

 
DBI es el módulo de interfaz de base de datos estándar de Perl. Se define un conjunto de métodos, variables y convenciones que proporcionan una interfaz de base de datos consistente independiente de la base de datos real que se utiliza. Para este caso utilizaremos una base de datos Mysql, veremos como establecer una conexión a una base de datos y ejecutar consultas mediante los métodos que proporciona el Módulo DBI ...

Primeramente veremos como establecer la conexión y crear una tabla si no existe, esta tabla se llamará 'usuarios', la cual nos servirá para trabajar con el resto de ejemplos.

crear-tabla.pl


#crear-tabla.pl
#Crear tabla
use DBI;
use strict;

my $admin = "root";
my $password = "password";
my $base_de_datos = "base_de_datos";
my $servidor = "localhost";

#Se establece la conexión a la base de datos mysql
my $mysql = DBI -> connect("DBI:mysql:$base_de_datos;host=$servidor", $admin, $password) || die "Error al conectar con la base de datos: $DBI::errstr";

#Creamos una tabla llamada usuarios si no existe
my $consulta = $mysql->prepare("CREATE TABLE IF NOT EXISTS usuarios (id INT(11) PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(100), email VARCHAR(100))")
|| die "Error al crear la tabla: $DBI::errstr";
#Ejecuta la consulta
my $resultado = $consulta->execute();

if ($resultado)
{
print "\n\n Consulta llevada a cabo correctamente \n\n";
}
#Se cierra la conexión
$consulta->finish;
$mysql->disconnect;


Bien, ya tenemos una tabla en la que poder realizar consultas, el siguiente ejemplo muestra como insertar nuevos campos a través de la consola en la recien creada tabla 'usuarios'.

insertar-datos.pl

#insertar-datos.pl
#Insertar Datos
use DBI;
use strict;

print "\n\n****INSERTAR DATOS EN LA TABLA USUARIOS****\n\n";
#Para la entrada de datos
print "Introduce el nombre a guardar ... ";
my $nombre = <STDIN>;
print "Introduce el email a guardar ... ";
my $email = <STDIN>;

my $admin = "root";
my $password = "password";
my $base_de_datos = "base_de_datos";
my $servidor = "localhost";

#Se establece la conexión a la base de datos mysql
my $mysql = DBI -> connect("DBI:mysql:$base_de_datos;host=$servidor", $admin, $password) || die "Error al conectar con la base de datos: $DBI::errstr";

#Preparamos la consulta para insertar datos
my $consulta = $mysql->prepare("INSERT INTO usuarios(nombre, email) VALUES('$nombre', '$email')")
|| die "Error al insertar los datos: $DBI::errstr";
#Ejecuta la consulta
my $resultado = $consulta->execute();

if ($resultado)
{
print "\n\n Consulta llevada a cabo correctamente \n\n";
}
#Se cierra la conexión
$consulta->finish;
$mysql->disconnect;


Tutorial de iniciación a Perl en Español

Puedes insertar varios usuarios esto te servirá para el ejemplo siguiente, en el cual extraeremos todos los usuarios almacenados en la tabla ...

seleccionar-datos.pl

#seleccionar-datos.pl
#Seleccionar Datos
use DBI;
use strict;

print "\n\n****TODOS LOS USUARIOS DE LA TABLA****\n\n";

my $admin = "root";
my $password = "password";
my $base_de_datos = "base_de_datos";
my $servidor = "localhost";

#Se establece la conexión a la base de datos mysql
my $mysql = DBI -> connect("DBI:mysql:$base_de_datos;host=$servidor", $admin, $password) || die "Error al conectar con la base de datos: $DBI::errstr";

#Preparamos la consulta para seleccionar datos
my $consulta = $mysql->prepare("SELECT * FROM usuarios")
|| die "Error al seleccionar datos: $DBI::errstr";

#Se ejecuta la consulta
my $resultado = $consulta->execute();

#Se extraen los datos
my $fila;
while($fila = $consulta->fetchrow_hashref())
{

#Cada valor devuelto por el Array se almacena en una variable
my $nombre = $fila->{nombre};
my $email = $fila->{email};
my $id = $fila->{id};

#Esta parte es para eliminar posibles saltos de línea
$nombre =~ s/\n//g;
$email =~ s/\n//g;
$id =~ s/\n//g;

#Se imprime cada fila
print "Id:" . $id .  " --- " . "Nombre:". $nombre . " --- " . "Email:" . $email . "\n";
}

#Se cierra la conexión
$consulta->finish;
$mysql->disconnect;

Tutorial de iniciación a Perl en Español

Ahora veremos como actualizar una determinada fila a través de la consola de comandos ...

Actualizar Datos

#actualizar-datos.pl
#Actualizar Datos
use DBI;
use strict;

print "\n\n****PROGRAMA PARA ACTUALIZAR DATOS DE LA TABLA****\n\n";

my $admin = "root";
my $password = "password";
my $base_de_datos = "base_de_datos";
my $servidor = "localhost";

#Se establece la conexión a la base de datos mysql
my $mysql = DBI -> connect("DBI:mysql:$base_de_datos;host=$servidor", $admin, $password) || die "Error al conectar con la base de datos: $DBI::errstr";

#Preparamos la consulta para seleccionar datos y tener una vista previa
my $consulta = $mysql->prepare("SELECT * FROM usuarios")
|| die "Error al seleccionar datos: $DBI::errstr";

#Se ejecuta la consulta
my $resultado = $consulta->execute();

#Se extraen los datos
my $fila;
while($fila = $consulta->fetchrow_hashref())
{

#Cada valor devuelto por el Array se almacena en una variable
my $nombre = $fila->{nombre};
my $email = $fila->{email};
my $id = $fila->{id};

#Esta parte es para eliminar posibles saltos de línea
$nombre =~ s/\n//g;
$email =~ s/\n//g;
$id =~ s/\n//g;

#Se imprime cada fila
print "Id:" . $id .  " --- " . "Nombre:". $nombre . " --- " . "Email:" . $email . "\n";
}

# Ahora preparamos los datos de entrada
print "Indique el numero id de la fila que desea actualizar:";
my $id = <STDIN>;
print "Nuevo valor del campo nombre: ";
my $nombre = <STDIN>;
print "Nuevo valor del campo email: ";
my $email = <STDIN>;

#Preparamos la consulta para actualizar datos
my $consulta = $mysql->prepare("UPDATE usuarios SET nombre='$nombre', email='$email' WHERE id=$id")
|| die "Error al seleccionar datos: $DBI::errstr";
$resultado = $consulta -> execute();
if ($resultado)
{
print "\n\n Actualizacion correcta \n\n";
}

#Se cierra la conexión
$consulta->finish;
$mysql->disconnect;

Tutorial de iniciación a Perl en Español

Y finalmente veremos un ejemplo para eliminar filas de la tabla a través de la entrada de datos ...

eliminar-datos.pl

#eliminar-datos.pl
#Eliminar Datos
use DBI;
use strict;

print "\n\n****PROGRAMA PARA ELIMINAR DATOS DE LA TABLA****\n\n";

my $admin = "root";
my $password = "password";
my $base_de_datos = "base_de_datos";
my $servidor = "localhost";

#Se establece la conexión a la base de datos mysql
my $mysql = DBI -> connect("DBI:mysql:$base_de_datos;host=$servidor", $admin, $password) || die "Error al conectar con la base de datos: $DBI::errstr";

#Preparamos la consulta para seleccionar datos y tener una vista previa
my $consulta = $mysql->prepare("SELECT * FROM usuarios")
|| die "Error al seleccionar datos: $DBI::errstr";

#Se ejecuta la consulta
my $resultado = $consulta->execute();

#Se extraen los datos
my $fila;
while($fila = $consulta->fetchrow_hashref())
{

#Cada valor devuelto por el Array se almacena en una variable
my $nombre = $fila->{nombre};
my $email = $fila->{email};
my $id = $fila->{id};

#Esta parte es para eliminar posibles saltos de línea
$nombre =~ s/\n//g;
$email =~ s/\n//g;
$id =~ s/\n//g;

#Se imprime cada fila
print "Id:" . $id .  " --- " . "Nombre:". $nombre . " --- " . "Email:" . $email . "\n";
}

# Ahora preparamos los datos de entrada
print "Indique el numero id de la fila que desea eliminar:";
my $id = <STDIN>;

#Preparamos la consulta para eliminar la fila
my $consulta = $mysql->prepare("DELETE FROM usuarios WHERE id=$id")
|| die "Error al eliminar la fila: $DBI::errstr";
$resultado = $consulta -> execute();
if ($resultado)
{
print "\n\n Eliminacion correcta \n\n";
}

#Se cierra la conexión
$consulta->finish;
$mysql->disconnect;