Introducción

En este tema, aprenderemos cómo interactuar con bases de datos en Perl utilizando el módulo DBI (Database Interface). DBI es una interfaz de programación de aplicaciones (API) que permite a los programas Perl interactuar con bases de datos de manera independiente del sistema de gestión de bases de datos (DBMS) subyacente.

Contenido

  1. Instalación de DBI y DBD::mysql
  2. Conexión a una Base de Datos
  3. Ejecutar Consultas SQL
  4. Recuperar Datos
  5. Insertar, Actualizar y Eliminar Datos
  6. Manejo de Errores
  7. Ejercicios Prácticos

  1. Instalación de DBI y DBD::mysql

Para interactuar con bases de datos, necesitamos instalar el módulo DBI y un controlador específico para el DBMS que estamos utilizando. En este ejemplo, usaremos MySQL.

cpan DBI
cpan DBD::mysql

  1. Conexión a una Base de Datos

Para conectarnos a una base de datos, utilizamos el método connect del módulo DBI. Aquí hay un ejemplo de cómo hacerlo:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

print "Conexión exitosa!\n";

Explicación del Código

  • use DBI;: Importa el módulo DBI.
  • $dsn: Data Source Name, especifica el tipo de base de datos, el nombre de la base de datos y el host.
  • $username y $password: Credenciales de la base de datos.
  • DBI->connect: Método para establecer la conexión.
  • RaiseError: Si se establece en 1, DBI generará una excepción en caso de error.
  • AutoCommit: Si se establece en 1, las transacciones se confirman automáticamente.

  1. Ejecutar Consultas SQL

Podemos ejecutar consultas SQL utilizando el método do para consultas que no devuelven datos (como INSERT, UPDATE, DELETE).

my $rows = $dbh->do("INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')");
print "$rows fila(s) afectada(s)\n";

  1. Recuperar Datos

Para recuperar datos, utilizamos los métodos prepare y execute, y luego fetchrow_array o fetchrow_hashref para obtener los resultados.

my $sth = $dbh->prepare("SELECT id, name, email FROM users");
$sth->execute();

while (my @row = $sth->fetchrow_array) {
    print "ID: $row[0], Name: $row[1], Email: $row[2]\n";
}

Explicación del Código

  • prepare: Prepara la consulta SQL.
  • execute: Ejecuta la consulta preparada.
  • fetchrow_array: Recupera una fila de resultados como una lista.

  1. Insertar, Actualizar y Eliminar Datos

Insertar Datos

my $sth = $dbh->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$sth->execute('Jane Doe', '[email protected]');

Actualizar Datos

my $sth = $dbh->prepare("UPDATE users SET email = ? WHERE name = ?");
$sth->execute('[email protected]', 'Jane Doe');

Eliminar Datos

my $sth = $dbh->prepare("DELETE FROM users WHERE name = ?");
$sth->execute('Jane Doe');

  1. Manejo de Errores

Es importante manejar los errores adecuadamente. DBI proporciona varias formas de hacerlo.

Usando RaiseError

$dbh->{RaiseError} = 1;
eval {
    $dbh->do("INVALID SQL STATEMENT");
};
if ($@) {
    print "Error: $@\n";
}

Usando err y errstr

my $sth = $dbh->prepare("INVALID SQL STATEMENT");
if (!$sth->execute) {
    print "Error: " . $dbh->errstr . "\n";
}

  1. Ejercicios Prácticos

Ejercicio 1: Conectar a una Base de Datos

Objetivo: Conectar a una base de datos MySQL llamada testdb y verificar la conexión.

Código:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

print "Conexión exitosa!\n";

Ejercicio 2: Insertar y Recuperar Datos

Objetivo: Insertar un nuevo usuario en la tabla users y luego recuperar todos los usuarios.

Código:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

# Insertar un nuevo usuario
my $sth = $dbh->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$sth->execute('Alice', '[email protected]');

# Recuperar todos los usuarios
$sth = $dbh->prepare("SELECT id, name, email FROM users");
$sth->execute();

while (my @row = $sth->fetchrow_array) {
    print "ID: $row[0], Name: $row[1], Email: $row[2]\n";
}

Ejercicio 3: Actualizar y Eliminar Datos

Objetivo: Actualizar el correo electrónico de un usuario y luego eliminarlo.

Código:

use DBI;

my $dsn = "DBI:mysql:database=testdb;host=localhost";
my $username = "root";
my $password = "password";

my $dbh = DBI->connect($dsn, $username, $password, {
    RaiseError => 1,
    AutoCommit => 1,
}) or die $DBI::errstr;

# Actualizar el correo electrónico de un usuario
my $sth = $dbh->prepare("UPDATE users SET email = ? WHERE name = ?");
$sth->execute('[email protected]', 'Alice');

# Eliminar el usuario
$sth = $dbh->prepare("DELETE FROM users WHERE name = ?");
$sth->execute('Alice');

Conclusión

En esta sección, hemos aprendido cómo interactuar con bases de datos en Perl utilizando el módulo DBI. Hemos cubierto cómo conectarse a una base de datos, ejecutar consultas SQL, recuperar datos, y manejar errores. Además, hemos practicado estos conceptos con ejercicios prácticos. En el siguiente módulo, exploraremos la programación web con Perl.

© Copyright 2024. Todos los derechos reservados