English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Perl en SQLite

Instalación

SQLite3 Se puede integrar el módulo DBI de Perl con Perl. El módulo DBI de Perl es un módulo de acceso a bases de datos del lenguaje de programación Perl. Define un conjunto de métodos, variables y reglas que proporcionan una interfaz estándar para bases de datos.

A continuación se muestra en Linux/Pasos sencillos para instalar el módulo DBI en máquinas UNIX:

$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
$ tar xvfz DBI-1.625.tar.gz
$ cd DBI-1.625
$ perl Makefile.PL
$ make
$ make install

Si necesita instalar el controlador de SQLite para DBI, siga los siguientes pasos para la instalación:

$ wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.11.tar.gz
$ tar xvfz DBD-SQLite-1.11.tar.gz
$ cd DBD-SQLite-1.11
$ perl Makefile.PL
$ make
$ make install

API de interfaz DBI

Aquí se presentan los programas DBI importantes, que pueden satisfacer sus necesidades de bases de datos SQLite en programas Perl. Si necesita más detalles, consulte el documento oficial de Perl DBI.

Número de secuenciaAPI & Descripción
1DBI->connect($data_source, "", "", \%attr)

Establecer una conexión a la base de datos o sesión solicitada por $data_source. Si la conexión es exitosa, devuelve un objeto de tratamiento de base de datos.

La forma de la fuente de datos es como se muestra a continuación:DBI:SQLite:dbname='test.db'. Donde, SQLite es el nombre del driver SQLite, test.db es el nombre del archivo de la base de datos SQLite. Si el nombre del archivo filename asignado a ':memory:'entonces se creará una base de datos en RAM, lo que durará únicamente durante la duración de la sesión.

Si el nombre del archivo filename es el nombre del archivo de dispositivo real, intentará abrir el archivo de bases de datos utilizando este valor de parámetro. Si no existe un archivo con ese nombre, se creará un nuevo archivo de bases de datos con ese nombre.

Puede mantener los segundos y terceros parámetros en cadenas de caracteres vacías, y el último parámetro se utiliza para pasar varios atributos, consulte los ejemplos a continuación.

2$dbh->do($sql)

Esta rutina prepara y ejecuta una simple sentencia SQL. Devuelve el número de filas afectadas, o devuelve undef si ocurre un error. El valor devuelto -1 Significa que el número de filas es desconocido, inaplicable o no disponible. Aquí, $dbh es proporcionado por DBI->connect() devuelve el tratamiento.

3$dbh->prepare($sql)

Esta rutina prepara una sentencia para su ejecución posterior en el motor de bases de datos y devuelve un objeto de tratamiento de sentencia.

4$sth->execute()

Esta rutina realiza cualquier tratamiento necesario para ejecutar cualquier sentencia preparada. Si ocurre un error, devuelve undef. Si se ejecuta con éxito, devuelve siempre true, independientemente del número de filas afectadas. Aquí, $sth es proporcionado por $dbh->prepare($sql) devuelve el objeto de tratamiento de la sentencia.

5$sth->fetchrow_array()

Esta rutina obtiene la siguiente línea de datos y la devuelve en forma de lista que contiene los valores de los campos. En esta lista, los campos nulos se devuelven como valores undef.

6$DBI::err

Esto es equivalente a $h->err. Donde, $h es cualquier tipo de tratamiento, como $dbh, $sth o $drh. Este programa devuelve el código de error del motor de bases de datos del último método del driver llamado.

7$DBI::errstr

Esto es equivalente a $h->errstr. Donde, $h es cualquier tipo de tratamiento, como $dbh, $sth o $drh. Este programa devuelve el mensaje de error del motor de bases de datos de la última llamada al método DBI.

8$dbh->disconnect()

Este procedimiento cierra antes de llamar a DBI->connect() Conexión de base de datos abierta.

Conectar a la base de datos

El siguiente segmento de código Perl muestra cómo conectar a una base de datos existente. Si la base de datos no existe, se creará y finalmente se devolverá un objeto de base de datos.

#!/usr/bin/perl
use DBI;
use strict;
my $driver   = "SQLite"; 
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) 
                      or die $DBI::errstr;
print "Base de datos abierta con éxito\n";

Ahora, ejecutemos el programa anterior para crear nuestra base de datos en el directorio actual test.dbPuede cambiar la ruta según sea necesario. Guarde el código anterior en el archivo sqlite.pl y ejecute como se muestra a continuación. Si se crea la base de datos con éxito, se mostrará el mensaje siguiente:

$ chmod +x sqlite.pl
$ ./sqlite.pl
Base de datos abierta con éxito

Crear tabla

El siguiente segmento de código Perl se utilizará para crear una tabla en la base de datos creada anteriormente:

#!/usr/bin/perl
use DBI;
use strict;
my $driver   = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
                      or die $DBI::errstr;
print "Base de datos abierta con éxito\n";
mi $stmt = qq(CREATE TABLE COMPANY
      (ID INT PRIMARY KEY NOT NULL,
       NAME TEXT NOT NULL,
       AGE INT NOT NULL,
       ADDRESS CHAR(50),
       SALARY REAL););
my $rv = $dbh->do($stmt);
if($rv < 0){
   print $DBI::errstr;
} else {
   imprimir "Se creó la tabla con éxito\n";
}
$dbh->disconnect();

Durante la ejecución del programa anterior, se creará test.db En la tabla COMPANY creada en el medio, se muestra el mensaje siguiente:

Base de datos abierta con éxito
Se creó la tabla con éxito

Atención:Si encuentra el siguiente error en alguna de las operaciones:

Falló la ejecución de st execute en DBD::SQLite: no es un error (21) en la línea dbdimp.c 398

En este caso, ya tiene disponible en DBD-Al instalar SQLite, se abrió el archivo dbdimp.c disponible, encontrando sqlite3_prepare() la función y cambie su tercer parámetro 0 a -1Finalmente, utilice make y make install Instale DBD::SQLite y el problema se resolverá. en este caso, tendrá disponible el archivo dbdimp.c en DBD-Instalación de SQLite y descubrimiento sqlite3_prepare() function and change its third argument to -1 instead of 0. Finally, install DBD::SQLite using make and execute make install to solve the problem.

INSERT operation

The following Perl program shows how to create records in the COMPANY table that was previously created:

#!/usr/bin/perl
use DBI;
use strict;
my $driver   = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
                      or die $DBI::errstr;
print "Base de datos abierta con éxito\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) or die $DBI::errstr;
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
print "Records created successfully\n";
$dbh->disconnect();

When the above program is executed, it will create the given record in the COMPANY table and display the following two lines:

Base de datos abierta con éxito
Records created successfully

SELECT operation

The following Perl program shows how to retrieve and display records from the COMPANY table that was previously created:

#!/usr/bin/perl
use DBI;
use strict;
my $driver   = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
                      or die $DBI::errstr;
print "Base de datos abierta con éxito\n";
my $stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
   print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n";
      print "SALARY = ". $row[3] ."\n\n";
}
print "Operación realizada con éxito\n";
$dbh->disconnect();

Ejecutando el programa anterior, se producirán los siguientes resultados:

Base de datos abierta con éxito
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  20000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000
Operación realizada con éxito

UPDATE operation

The following Perl code shows how to use the UPDATE statement to update any record and then retrieve and display the updated record from the COMPANY table:

#!/usr/bin/perl
use DBI;
use strict;
my $driver   = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
                      or die $DBI::errstr;
print "Base de datos abierta con éxito\n";
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ){
   print $DBI::errstr;
} else {
   print "Total number of rows updated : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
   print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n";
      print "SALARY = ". $row[3] ."\n\n";
}
print "Operación realizada con éxito\n";
$dbh->disconnect();

Ejecutando el programa anterior, se producirán los siguientes resultados:

Base de datos abierta con éxito
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000
Operación realizada con éxito

Operación DELETE

El siguiente código Perl muestra cómo eliminar cualquier registro utilizando una sentencia DELETE y luego obtener y mostrar los registros restantes de la tabla COMPANY:

#!/usr/bin/perl
use DBI;
use strict;
my $driver   = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
                      or die $DBI::errstr;
print "Base de datos abierta con éxito\n";
my $stmt = qq(DELETE from COMPANY where ID=2;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ){
   print $DBI::errstr;
} else {
   print "Número total de filas eliminadas : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
   print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n";
      print "SALARY = ". $row[3] ."\n\n";
}
print "Operación realizada con éxito\n";
$dbh->disconnect();

Ejecutando el programa anterior, se producirán los siguientes resultados:

Base de datos abierta con éxito
Número total de filas eliminadas : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000
Operación realizada con éxito