PostgreSQL - Interface Perl

Installation

PostgreSQL peut être intégré à Perl en utilisant le 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/T/TU/TURNSTEP/DBD-Pg-2.19.3.tar.gz
$ tar xvfz DBD-Pg-2.19.3.tar.gz
$ cd DBD-Pg-2.19.3
$ perl Makefile.PL
$ make
$ make install

Avant de commencer à utiliser l'interface Perl PostgreSQL, recherchez le pg_hba.conf dans votre répertoire d'installation PostgreSQL et ajoutez la ligne suivante -

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Vous pouvez démarrer / redémarrer le serveur postgres, au cas où il ne serait pas en cours d'exécution, en utilisant la commande suivante -

[[email protected]]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

API d'interface DBI

Voici les routines DBI importantes, qui peuvent suffire à vos besoins pour travailler avec la base de données SQLite à partir de votre programme Perl. Si vous recherchez une application plus sophistiquée, vous pouvez consulter la documentation officielle de Perl DBI.

S. Non. API et description
1

DBI→connect($data_source, "userid", "password", \%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 suivante: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg est le nom du pilote PostgreSQL et testdb est le nom de la base de données.

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

Cela équivaut à $ h → err, où $ h est l'un des types de descripteurs tels que $ 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 ().

Connexion à 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  = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) 
   or die $DBI::errstr;

print "Opened database successfully\n";

Maintenant, exécutons le programme donné ci-dessus pour ouvrir notre base de données testdb; si la base de données est ouverte avec succès, elle donnera le message suivant -

Open database successfully

Créer une table

Le programme Perl suivant sera 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   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";
my $userid = "postgres";
my $password = "pass123";
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 la table COMPANY dans votre testdb et il affichera les messages suivants -

Opened database successfully
Table created successfully

Opération INSERT

Le programme Perl suivant montre comment nous pouvons créer des enregistrements dans notre table COMPANY créée dans l'exemple ci-dessus -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
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 donné ci-dessus est exécuté, il créera des 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 nous pouvons récupérer et afficher les enregistrements de notre table COMPANY créée dans l'exemple ci-dessus -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
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 donné 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 nous pouvons utiliser l'instruction UPDATE pour mettre à jour n'importe quel enregistrement, puis récupérer et afficher les enregistrements mis à jour de notre table COMPANY -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
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 donné 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 nous pouvons utiliser l'instruction DELETE pour supprimer n'importe quel enregistrement, puis récupérer et afficher les enregistrements restants de notre table COMPANY -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
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 donné 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