SQLite - Perl
Dans ce chapitre, vous apprendrez à utiliser SQLite dans les programmes Perl.
Installation
SQLite3 peut être intégré à Perl à l'aide du module Perl DBI, qui est un module d'accès à la base de données pour le langage de programmation Perl. Il définit un ensemble de méthodes, variables et conventions qui fournissent une interface de base de données standard.
Voici des étapes simples pour installer le module DBI sur votre machine Linux / 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 vous devez installer le pilote SQLite pour DBI, il peut être installé comme suit -
$ 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 d'interface DBI
Voici des routines DBI importantes, qui peuvent suffire à votre besoin pour travailler avec la base de données SQLite de votre programme Perl. Si vous recherchez une application plus sophistiquée, vous pouvez consulter la documentation officielle de Perl DBI.
Sr.No. | API et description |
---|---|
1 | DBI->connect($data_source, "", "", \%attr) Établit une connexion de base de données, ou session, à la source de données $ demandée. Renvoie un objet handle de base de données si la connexion réussit. La source de données a la forme comme - DBI:SQLite:dbname = 'test.db'où SQLite est le nom du pilote SQLite et test.db est le nom du fichier de base de données SQLite. Si le nom de fichier est donné comme':memory:', il créera une base de données en mémoire dans la RAM qui ne durera que pendant la durée de la session. Si le nom de fichier est le nom de fichier de périphérique réel, il tente d'ouvrir le fichier de base de données en utilisant sa valeur. Si aucun fichier de ce nom n'existe, un nouveau fichier de base de données de ce nom est créé. Vous conservez le deuxième et le troisième paramètre sous forme de chaînes vides et le dernier paramètre consiste à transmettre divers attributs, comme illustré dans l'exemple suivant. |
2 | $dbh->do($sql) Cette routine prépare et exécute une seule instruction SQL. Renvoie le nombre de lignes affectées ou non en cas d'erreur. Une valeur de retour de -1 signifie que le nombre de lignes est inconnu, non applicable ou non disponible. Ici, $ dbh est un handle retourné par l'appel DBI-> connect (). |
3 | $dbh->prepare($sql) Cette routine prépare une instruction pour une exécution ultérieure par le moteur de base de données et renvoie une référence à un objet descripteur d'instruction. |
4 | $sth->execute() Cette routine effectue tout traitement nécessaire pour exécuter l'instruction préparée. Un undef est renvoyé si une erreur se produit. Une exécution réussie renvoie toujours true quel que soit le nombre de lignes affectées. Ici, $ sth est un handle de déclaration retourné par l'appel $ dbh-> prepare ($ sql). |
5 | $sth->fetchrow_array() Cette routine récupère la ligne de données suivante et la renvoie sous forme de liste contenant les valeurs de champ. Les champs nuls sont renvoyés sous forme de valeurs undef dans la liste. |
6 | $DBI::err C'est équivalent à $ h-> err, où $ h est l'un des types de descripteurs comme $ dbh, $ sth ou $ drh. Cela renvoie le code d'erreur du moteur de base de données natif de la dernière méthode de pilote appelée. |
sept | $DBI::errstr C'est équivalent à $ h-> errstr, où $ h est l'un des types de descripteurs comme $ dbh, $ sth ou $ drh. Cela renvoie le message d'erreur du moteur de base de données natif de la dernière méthode DBI appelée. |
8 | $dbh->disconnect() Cette routine ferme une connexion à la base de données précédemment ouverte par un appel à DBI-> connect (). |
Se connecter à la base de données
Le code Perl suivant montre comment se connecter à une base de données existante. Si la base de données n'existe pas, elle sera créée et finalement un objet de base de données sera renvoyé.
#!/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 "Opened database successfully\n";
Maintenant, exécutons le programme ci-dessus pour créer notre base de données test.db dans le répertoire courant. Vous pouvez changer votre chemin selon vos besoins. Conservez le code ci-dessus dans le fichier sqlite.pl et exécutez-le comme indiqué ci-dessous. Si la base de données est créée avec succès, elle affichera le message suivant -
$ chmod +x sqlite.pl
$ ./sqlite.pl
Open database successfully
Créer une table
Le programme Perl suivant est utilisé pour créer une table dans la base de données précédemment créée.
#!/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 "Opened database successfully\n";
my $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 {
print "Table created successfully\n";
}
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il créera une table COMPANY dans votre test.db et affichera les messages suivants -
Opened database successfully
Table created successfully
NOTE - Si vous voyez l'erreur suivante dans l'une des opérations -
DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398
Dans ce cas, ouvrez dbdimp.c file disponible dans l'installation de DBD-SQLite et découvrez sqlite3_prepare() fonction et changez son troisième argument en -1 au lieu de 0. Enfin, installez DBD :: SQLite en utilisant make et fait make install pour résoudre le problème.
Opération INSERT
Le programme Perl suivant montre comment créer des enregistrements dans la table COMPANY créée dans l'exemple ci-dessus.
#!/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 "Opened database successfully\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;
$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;
$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;
$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();
Lorsque le programme ci-dessus est exécuté, il créera les enregistrements donnés dans la table COMPANY et affichera les deux lignes suivantes -
Opened database successfully
Records created successfully
Opération SELECT
Le programme Perl suivant montre comment récupérer et afficher les enregistrements de la table COMPANY créée dans l'exemple ci-dessus.
#!/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 "Opened database successfully\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 "Operation done successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant.
Opened database successfully
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
Operation done successfully
Opération UPDATE
Le code Perl suivant montre comment mettre à jour l'instruction pour mettre à jour n'importe quel enregistrement, puis récupérer et afficher les enregistrements mis à jour à partir de la table 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 "Opened database successfully\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 "Operation done successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant.
Opened database successfully
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
Operation done successfully
Opération DELETE
Le code Perl suivant montre comment utiliser l'instruction DELETE pour supprimer n'importe quel enregistrement, puis récupérer et afficher les enregistrements restants de la table 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 "Opened database successfully\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 "Total number of rows deleted : $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 "Operation done successfully\n";
$dbh->disconnect();
Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant.
Opened database successfully
Total number of rows deleted : 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
Operation done successfully