Cómo acceder a la base de datos SQLite en Perl
SQLite es un sistema de base de datos transaccional basado en archivos, sin configuración y sin servidor. Debido a su diseño liviano, autónomo y compacto, SQLite es una opción extremadamente popular cuando desea integrar una base de datos en su aplicación. En esta publicación, le mostraré cómo crear y acceder a una base de datos SQLite en el script Perl. El fragmento de código de Perl que presento es completamente funcional, por lo que puede modificarlo e integrarlo fácilmente en su proyecto.
Preparación para SQLite Access
Voy a usar el controlador SQLite DBI Perl para conectarme a SQLite3. Por lo tanto, debe instalarlo (junto con SQLite3) en su sistema Linux.
Para Debian, Ubuntu o Linux Mint:
$ sudo apt-get install sqlite3 libdbd-sqlite3-perl
Para CentOS, Fedora o RHEL:
$ sudo yum install sqlite perl-DBD-SQLite
Después de la instalación, puede verificar si el controlador SQLite está realmente disponible utilizando el siguiente script.
#!/usr/bin/perl
use DBI;
my @drv = DBI->available_drivers();
print join("n", @drv), "n";
Si ejecuta el script, debería ver SQLite
en la salida.
DBM
ExampleP
File
Gofer
Proxy
SQLite
Sponge
Ejemplo de acceso a Perl SQLite
Aquí está el ejemplo completo del código Perl de acceso a SQLite. Este script Perl demostrará las siguientes rutinas de administración de bases de datos SQLite.
-
Cree y conéctese a una base de datos SQLite.
Cree una nueva tabla en una base de datos SQLite.
Insertar filas en una tabla.
Buscar e iterar filas en una tabla.
Actualizar filas en una tabla.
Eliminar filas en una tabla.
#!/usr/bin/perl
use DBI;
use strict;
# define database name and driver
my $driver = "SQLite";
my $db_name = "linux-console.net.db";
my $dbd = "DBI:$driver:dbname=$db_name";
# sqlite does not have a notion of username/password
my $username = "";
my $password = "";
# create and connect to a database.
# this will create a file named linux-console.net.db
my $dbh = DBI->connect($dbd, $username, $password, { RaiseError => 1 })
or die $DBI::errstr;
print STDERR "Database opened successfullyn";
# create a table
my $stmt = qq(CREATE TABLE IF NOT EXISTS NETWORK
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
HOSTNAME TEXT NOT NULL,
IPADDRESS INT NOT NULL,
OS CHAR(50),
CPULOAD REAL););
my $ret = $dbh->do($stmt);
if($ret < 0) {
print STDERR $DBI::errstr;
} else {
print STDERR "Table created successfullyn";
}
# insert three rows into the table
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
VALUES ('linux-console.net', 16843009, 'Ubuntu 14.10', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
VALUES ('bert', 16843010, 'CentOS 7', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
VALUES ('puppy', 16843011, 'Ubuntu 14.10', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
# search and iterate row(s) in the table
$stmt = qq(SELECT id, hostname, os, cpuload from NETWORK;);
my $obj = $dbh->prepare($stmt);
$ret = $obj->execute() or die $DBI::errstr;
if($ret < 0) {
print STDERR $DBI::errstr;
}
while(my @row = $obj->fetchrow_array()) {
print "ID: ". $row[0] . "n";
print "HOSTNAME: ". $row[1] ."n";
print "OS: ". $row[2] ."n";
print "CPULOAD: ". $row[3] ."nn";
}
# update specific row(s) in the table
$stmt = qq(UPDATE NETWORK set CPULOAD = 50 where OS='Ubuntu 14.10';);
$ret = $dbh->do($stmt) or die $DBI::errstr;
if( $ret < 0 ) {
print STDERR $DBI::errstr;
} else {
print STDERR "A total of $ret rows updatedn";
}
# delete specific row(s) from the table
$stmt = qq(DELETE from NETWORK where ID=2;);
$ret = $dbh->do($stmt) or die $DBI::errstr;
if($ret < 0) {
print STDERR $DBI::errstr;
} else {
print STDERR "A total of $ret rows deletedn";
}
# quit the database
$dbh->disconnect();
print STDERR "Exit the databasen";
Una ejecución exitosa del script Perl anterior creará un archivo de base de datos SQLite llamado linux-console.net.db
y mostrará el siguiente resultado.
Database opened successfully
Table created successfully
ID: 1
HOSTNAME: linux-console.net
OS: Ubuntu 14.10
CPULOAD: 0
ID: 2
HOSTNAME: bert
OS: CentOS 7
CPULOAD: 0
ID: 3
HOSTNAME: puppy
OS: Ubuntu 14.10
CPULOAD: 0
A total of 2 rows updated
A total of 1 rows deleted
Exit the database
Solución de problemas
Si intenta acceder a SQLite en Perl sin instalar el controlador SQLite DBI, encontrará el siguiente error. Debe instalar el controlador DBI como se describe al principio para corregir este error.
Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./script.pl line 3.
BEGIN failed--compilation aborted at ./script.pl line 3.