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.$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.
- 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