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
- Instalación de DBI y DBD::mysql
- Conexión a una Base de Datos
- Ejecutar Consultas SQL
- Recuperar Datos
- Insertar, Actualizar y Eliminar Datos
- Manejo de Errores
- Ejercicios Prácticos
- 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.
- 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.$usernamey$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.
- 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";
- 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.
- 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
- 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";
}
- 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.
Curso de Programación en Perl
Módulo 1: Introducción a Perl
Módulo 2: Programación Básica en Perl
Módulo 3: Trabajando con Datos
Módulo 4: Programación Intermedia en Perl
Módulo 5: Programación Avanzada en Perl
- Expresiones Regulares Avanzadas
- Interacción con Bases de Datos usando DBI
- Programación Web con Perl
- Multithreading
