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

Interface PostgreSQL Perl

Installation

PostgreSQL peut être intégré avec Perl via le module perldbi, qui est un module d'accès aux bases de données pour le langage de programmation Perl. Il définit un ensemble de méthodes, de variables et de conventions fournissant une interface standard aux bases de données.

Voici les étapes à suivre sur votre Linux/Étapes simples pour installer le module DBI sur un ordinateur 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 avez besoin d'installer le pilote SQLite pour DBI, vous pouvez suivre la procédure suivante pour l'installer

$ 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, trouvez le fichier pg_hba.conf dans le répertoire d'installation PostgreSQL et ajoutez la ligne suivante

# IPv4 Connexions locales :
host all all         127.0.0.1/32          md5

Si le serveur postgres n'est pas en cours d'exécution, vous pouvez utiliser la commande suivante pour le démarrer/Redémarrage du serveur postgres-

[root@host]# service postgresql restart
Arrêt du service postgresql : [...] [OK]
Démarrage du service postgresql : [...] [OK]

APIs de l'interface DBI

Voici quelques routines DBI importantes qui peuvent répondre à vos besoins pour utiliser une base de données SQLite dans un programme Perl. Si vous cherchez des applications plus complexes, vous pouvez consulter la documentation officielle Perl DBI.

API & Description
1

DBI→connect($data_source, "userid", "password", \%attr)

Établir une connexion ou une session à la base de données demandée $data_source. Si la connexion est réussie, renvoie un objet gestionnaire de base de données.

Le format du Datasource est : DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg est le nom du pilote PostgreSQL, testdb est le nom de la base de données.

2

dbh→do($sql)

Cette routine prépare et exécute une requête SQL. En cas d'erreur, renvoie le nombre de lignes affectées ou non définies. La valeur de retour-1Indique que le nombre de lignes est inconnu, non applicable ou non disponible. Ici, $dbh est le gestionnaire renvoyé par la fonction DBI→connect().

3

dbh→prepare($sql)

Préparer une requête pour qu'elle soit exécutée par le moteur de base de données plus tard, et renvoyer une référence à l'objet gestionnaire de requête.
4

$sth→execute()

Effectuer tout traitement nécessaire pour exécuter la requête préparée. Si une erreur se produit, renvoie undef. L'exécution réussie renvoie toujours true, peu importe le nombre de lignes affectées. Ici, $sth est un gestionnaire de requête renvoyé par la fonction dbh→prepare($sql).

5

$sth→fetchrow_array()

Obtenir la ligne suivante et la renvoyer sous forme de liste contenant les valeurs des champs. Les champs vides sont renvoyés sous forme de valeur undef dans la liste.

6

$DBI::err

相当于$h->err,其中$h是任何句柄类型,如$dbh、$sth或$drh。这将从上次调用的驱动程序方法返回本机数据库引擎错误代码。

7

$DBI::errstr

相当于$h->errstr,其中$h是任何句柄类型,如$dbh、$sth或$drh。这将从上次调用的DBI方法返回本机数据库引擎错误消息。

8

$dbh->disconnect();

关闭了之前通过调用DBI->connect()打开的数据库连接。

连接数据库

下面的Perl代码展示了如何连接到现有数据库。如果数据库不存在,那么将创建它,最后将返回一个数据库对象。

#!/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 })}} 
   ou die $DBI::errstr;
print "Base de données ouverte avec succès\n";

现在,让我们运行上面给定的程序来打开数据库testdb;如果数据库成功打开,那么它将给出以下消息-

Open database successfully

创建表

下面的Perl程序将用于在先前创建的数据库中创建表

#!/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 })}}
   ou die $DBI::errstr;
print "Base de données ouverte avec succès\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->déconnect();

当执行上面给定的程序时,它将在 testdb 中创建 COMPANY 表,并显示以下消息-

Base de données ouverte avec succès
Table created successfully

INSERT 操作

下面的Perl程序显示了如何在上面示例中创建的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 })}}
   ou die $DBI::errstr;
print "Base de données ouverte avec succès\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) ou die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) ou die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (3, 'Teddy', 23, 'Norway',}} 20000.00 ));
$rv = $dbh->do($stmt) ou 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) ou die $DBI::errstr;
print "Enregistrements créés avec succès\n";
$dbh->déconnect();

Lorsque le programme ci-dessus s'exécute, les enregistrements spécifiés seront créés dans la table COMPANY et les deux lignes suivantes seront affichées

Base de données ouverte avec succès
Enregistrements créés avec succès

Opération SELECT

Le programme Perl suivant montre comment obtenir et afficher les enregistrements de la table COMPANY créée dans l'exemple précédent-

#!/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 })}}
   ou die $DBI::errstr;
print "Base de données ouverte avec succès\n";
my $stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() ou 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 "Opération effectuée avec succès\n";
$dbh->déconnect();

Lorsque le programme ci-dessus est exécuté, le résultat suivant est généré

Base de données ouverte avec succès
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
Opération effectuée avec succès

Opération UPDATE

Le code Perl suivant montre comment utiliser une instruction UPDATE pour mettre à jour n'importe quel enregistrement, puis obtenir et afficher les enregistrements mis à jour de la 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 })}}
   ou die $DBI::errstr;
print "Base de données ouverte avec succès\n";
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) ou die $DBI::errstr;
if( $rv < 0 ) {
   print $DBI::errstr;
}else{
   print "Nombre total de lignes mises à jour : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary FROM COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() ou 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 "Opération effectuée avec succès\n";
$dbh->déconnect();

Lorsque le programme ci-dessus est exécuté, le résultat suivant est généré

Base de données ouverte avec succès
Nombre total de lignes mises à jour : 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
Opération effectuée avec succès

Opération DELETE

Le code Perl suivant montre comment utiliser une instruction DELETE pour supprimer n'importe quel enregistrement, puis afficher les enregistrements de la table COMPANY-obtenir et afficher les enregistrements restants

#!/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 })}}
   ou die $DBI::errstr;
print "Base de données ouverte avec succès\n";
my $stmt = qq(DELETE FROM COMPANY WHERE ID=)2;);
my $rv = $dbh->do($stmt) ou die $DBI::errstr;
if( $rv < 0 ) {
   print $DBI::errstr;
} else {
   print "Nombre total de lignes supprimées : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary FROM COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() ou 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 "Opération effectuée avec succès\n";
$dbh->déconnect();

Lorsque le programme ci-dessus est exécuté, le résultat suivant est généré

Base de données ouverte avec succès
Nombre total de lignes supprimées : 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
Opération effectuée avec succès