perl | Gestión de base de datos usando DBI

requisitos previos:

La creación de programas de base de datos es uno de los usos más comunes de Perl. Usando Perl, podemos crear aplicaciones web robustas junto con una base de datos para administrar todos los datos. Proporciona un excelente soporte para la interfaz y una amplia gama de formatos de bases de datos. Para conectarse y consultar una base de datos, Perl proporciona un módulo llamado DBI . DBI es una interfaz de base de datos para comunicarse con servidores de bases de datos que utilizan lenguaje de consulta estructurado (SQL) para obtener datos.

Acceder a una base de datos en Perl generalmente toma dos pasos. El módulo DBI proporciona una API para el acceso a la base de datos. Un programa utiliza las funciones de DBI para manipular la base de datos. La segunda etapa del acceso a la base de datos desde Perl es un módulo de controlador de base de datos (DBD) . Cada sistema de base de datos diferente requiere su propio controlador. Este enfoque permite que un programa de aplicación de base de datos Perl sea relativamente independiente de la base de datos particular a la que accederá.

Instalación: para instalar el módulo DBI, abra la terminal, escriba el siguiente comando y presione Entrar:

perl -MCPAN -e 'install Bundle::DBI'

Esto descargará e instalará automáticamente el controlador para el módulo DBI para proporcionar conectividad de base de datos con Perl.

Interfaz independiente de base de datos (DBI)

Como sugiere el nombre, DBI proporciona una interfaz independiente para los programas Perl. Esto significa que el código Perl no depende de la base de datos que se ejecuta en el backend. El módulo DBI proporciona abstracción , es decir, podemos escribir nuestro código sin preocuparnos por la base de datos que se ejecuta en el back-end.

Para importar las funciones del módulo Interfaz independiente de la base de datos, necesitamos importar o incluir el módulo con la ayuda de pragma de «uso». El use DBIpragma nos permite usar el módulo DBI para manipular la base de datos a la que nos estamos conectando.

Sintaxis: use DBI;

Conexión a la base de datos:

El método se utiliza para conectarse a la base de datos especificada. Se necesitan tres argumentos: connect()

  1. Una string de tres valores separados por un ‘:’ en este ejemplo, es “DBI:mysql:test”. El primer valor especifica que estamos usando DBI. el segundo valor especifica el motor de la base de datos, que, en este caso, es MySQL. el tercer valor especifica el nombre de la base de datos a la que desea conectarse.
  2. El siguiente argumento del método connect() es el nombre de usuario. En este caso, el usuario es ‘root’.
  3. El último argumento es la contraseña de su sistema local. En este ejemplo, es ‘contraseña’

Sintaxis:

my $dbh = DBI->connect (“DBI:mysql:test”, “root”, “password”) o die “Can’t connect: ” . DBI->errstr();

La declaración «o morir» finaliza el programa si no pudo establecer una conexión con la base de datos, con un mensaje de error. El errstr()método devuelve una string que contiene los errores encontrados al conectarse a la base de datos.

Preparación de consultas:

El prepare()método toma en un parámetro, la consulta SQL a ejecutar. La consulta SQL se toma en forma de string que contiene la instrucción SQL. Esta instrucción SQL es la misma que las instrucciones SQL que ejecutaría en MySQL. Devuelve un objeto llamado identificador de declaración que se puede usar para ejecutar consultas.

Sintaxis:

my $sth = $dbh->prepare( ” CREATE TABLE emp( id INT CLAVE PRIMARIA, nombre VARCHAR(10), salario INT, “);

Ahora, la consulta está preparada para su ejecución. Tenga en cuenta que en la consulta anterior, estamos creando una tabla con las columnas id , nombre y salario .

Ejecutando las consultas:

El execute()método ejecuta la consulta escrita en el prepare()método. No necesita ningún argumento. Se llama utilizando el objeto identificador de sentencia creado cuando se ejecuta la sentencia ‘ preparar ‘.

Sintaxis:

$algo->ejecutar();

Obtención de valores del resultado:

El fetchrow()método se utiliza para recuperar la siguiente fila de datos del resultado de la consulta ejecutada. Si se ejecuta una consulta de selección, el fetchrow()método obtiene la siguiente fila del resultado. Devuelve una fila del resultado que se puede asignar a las variables. Cuando se usa en un ciclo while, podemos buscar y mostrar todas las filas en la base de datos usando el fetchrow()método.

Sintaxis:

($id, $nombre, $salario) = $sth->fetchrow();

Los valores de cada columna se almacenan en las tres variables.

La fetchrow_array()función devuelve una array que contiene la fila del resultado.

Sintaxis:

mi @fila = $sth->fetchrow_array( )

Desconectar:

Una vez que se ejecutan todas las consultas, debemos desconectar la conexión. Esto se hace mediante el uso de la disconnect()función. Si lo hace, permite que el script de Perl finalice correctamente la conexión. No desconectarse de la base de datos no generará ningún error. Por lo general, es una buena práctica hacerlo.

Sintaxis:

$dbh->desconectar();

Creando la base de datos en MySQL:

MySQL debe estar instalado en su sistema y se requieren conocimientos básicos de MySQL.

  • Inicie sesión en su servidor MySql
  • Cree una base de datos llamada » prueba «. Nos conectaremos a esta base de datos, así que asegúrese de que el
    nombre sea » prueba «.
  • Asegúrese de que esta base de datos no tenga tablas, ya que crearemos una tabla llamada «emp» e
    insertaremos valores en esta tabla

Poniendolo todo junto:

Una vez que haya creado la base de datos en MySQL , podemos acceder a esa base de datos en Perl. Primero creamos una tabla emp en la base de datos llamada test con el esquema: ( id INTEGER PRIMARY KEY, name VARCHAR(10), wage INT, dept INT). Una vez que la tabla se crea sin ningún error, insertamos valores en la tabla.
Una vez que se insertan los valores, podemos consultar la tabla para seleccionar todas las filas y mostrarlas al usuario usando la fetchrow()función.

Ejemplo:

#!/usr/bin/perl -w
use DBI;
  
# definition of variables
  
# name of the database. In this case,
# the name of the database in my local
# system is test.
  
# user in this case is root
$user = "root";
# this is the password for root
$password = "password"; 
  
# connect to MySQL database
my $dbh = DBI->connect ("DBI:mysql:test",
                        $user,
                        $password) 
                        or die "Can't connect to database: $DBI::errstr\n";
  
print "connected to the database\n";
  
# the test database contains a table called emp 
# the schema : (id INTEGER PRIMARY KEY, 
#               name VARCHAR(10), salary INT, dept INT)
# let us first insert some values
  
# prepare the query to 
# create the emp table
my $sth = $dbh->prepare("CREATE TABLE emp(id INT PRIMARY KEY, 
                                         name VARCHAR(10), 
                                         salary INT, dept INT)");
  
# execute the query
# now, the table is created
$sth->execute();
  
# prepare the query
my $sth = $dbh->prepare("INSERT INTO emp
                        VALUES(?, ?, ?, ?)");
  
# define the variables to be inserted
# into the table
my $id = 1;
my $name = "adith";
my $salary = 1000;
my $dept = 2;
  
# insert these values into the emp table.
$sth->execute($id, $name, $salary, $dept);
  
# insert some more rows into the table.
$sth->execute($id + 1, $name, 
              $salary + 100, $dept - 1);
  
# insert more rows
$sth->execute($id + 2, "Tyrion",
              $salary + 1000, $dept + 1);
  
print "Successfully inserted values into the table\n";
  
# now, select all the rows from the table.
my $sth = $dbh->prepare("SELECT * FROM emp");
  
# execute the query
$sth->execute();
  
# Retrieve the results of a row of data and print
print "\tQuery results:\n================================================\n";
  
# fetch the contents of the table 
# row by row using fetchrow_array() function
while (my @row = $sth->fetchrow_array()) 
{
    print "@row\n";
}
  
# if the function cannot be execute, show a warning.
warn "Problem in retrieving results", $sth->errstr( ), "\n"
if $sth->err();
  
print "\n";
  
# select particular columns. 
  
# prepare the query
my $sth = $dbh->prepare("SELECT name, salary FROM emp");
  
# execute the query
$sth->execute( );
  
# Retrieve the results of a row of data and print
print "\tQuery results:\n================================================\n";
  
while(($name, $sal) = $sth->fetchrow_array()) 
{
    print "Name: $name, salary: $sal\n";
}
warn "Problem in retrieving results", $sth->errstr( ), "\n"
if $sth->err( );
  
# end of program
exit;

Producción :

Publicación traducida automáticamente

Artículo escrito por Adith Bharadwaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *