English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
PostgreSQL può essere integrato con Perl utilizzando il modulo perldbi, che è un modulo di accesso al database del linguaggio di programmazione Perl. Definisce un insieme di metodi, variabili e convenzioni che forniscono un'interfaccia standard per il database.
Ecco una guida semplice per l'installazione del modulo DBI sul vostro computer 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
Se è necessario installare il driver SQLite per DBI, è possibile installarlo seguendo i seguenti passaggi
$ 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
Prima di iniziare a utilizzare l'interfaccia Perl PostgreSQL, trovare il file pg_hba.conf nella directory di installazione di PostgreSQL e aggiungere la seguente riga
# connessioni locali IPv4: host all all 127.0.0.1/32 md5
Se il server postgres non è in esecuzione, è possibile utilizzare i seguenti comandi per avviare/riavviare il server postgres
[root@host]# service postgresql restart Fermando il servizio postgresql: [ OK ] Starting postgresql service: [ OK ]
Di seguito sono riportati alcuni esempi di routine DBI importanti che possono soddisfare le tue esigenze di database SQLite nel programma Perl. Se stai cercando applicazioni più complesse, puoi consultare la documentazione ufficiale Perl DBI.
N. Ord. | API & Descrizione |
---|---|
1 | DBI→connect($data_source, "userid", "password", \%attr) Stabilisce una connessione o una sessione al database richiesto $data_source. Se la connessione è riuscita, restituisce un oggetto gestore del database. Il formato del Datasource è: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg è il nome del driver PostgreSQL, testdb è il nome del database. |
2 | $dbh→do($sql) Questa routine prepara ed esegue una statement SQL. Restituisce il numero di righe interessate o non definite quando si verifica un errore. Un valore -1 indica che il numero di righe è sconosciuto, non applicabile o non disponibile. L'$dbh è il gestore restituito dalla chiamata DBI→connect(). |
3 | $dbh→prepare($sql) Prepara una statement per essere eseguita dal motore di database in un secondo momento e restituisce un riferimento all'oggetto gestore della statement. |
4 | $sth→execute() Esegue qualsiasi elaborazione necessaria per eseguire una statement preparata. Se si verifica un errore, restituisce undef. L'esecuzione con successo restituisce sempre true, indipendentemente dal numero di righe interessate. L'$sth è un gestore di statement restituito dalla chiamata $dbh→prepare($sql). |
5 | $sth→fetchrow_array() Ottiene la riga successiva dei dati e la restituisce come elenco di valori dei campi. Gli spazi vuoti nell'elenco vengono restituiti come valori undef. |
6 | $DBI::err Equivale a $h→err, dove $h è qualsiasi tipo di gestore, come $dbh, $sth o $drh. Questa restituirà il codice di errore del motore di database locale dell'ultima chiamata al metodo del driver. |
7 | $DBI::errstr Equivale a $h→errstr, dove $h è qualsiasi tipo di gestore, come $dbh, $sth o $drh. Questa restituirà il messaggio di errore del motore di database locale dell'ultima chiamata al metodo DBI. |
8 | $dbh->disconnect() Chiuse la connessione al database precedentemente aperta tramite la chiamata 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 }); or die $DBI::errstr; print "Database aperto con successo\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 }); or die $DBI::errstr; print "Database aperto con successo\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();
当执行上面给定的程序时,它将在 testdb 中创建 COMPANY 表,并显示以下消息-
Database aperto con successo Table created successfully
以下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 }); or die $DBI::errstr; print "Database aperto con successo\n"; my $stmt = qq(CREATE TABLE COMPANY; 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();
当上述程序执行时,将在 COMPANY 表中创建给定的记录,并显示以下两行
Database aperto con successo Records created successfully
下面的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 }); or die $DBI::errstr; print "Database aperto con successo\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 "Operazione eseguita con successo\n"; $dbh->disconnect();
Quando viene eseguito il programma sopra menzionato, si ottiene il seguente risultato
Database aperto con successo 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 Operazione eseguita con successo
下面的Perl代码展示了如何使用UPDATE语句更新任何记录,然后从我们的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 "Database aperto con successo\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 "Operazione eseguita con successo\n"; $dbh->disconnect();
Quando viene eseguito il programma sopra menzionato, si ottiene il seguente risultato
Database aperto con successo 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 Operazione eseguita con successo
下面的 Perl 代码展示了如何使用 DELETE 语句删除任何记录,然后从 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 "Database aperto con successo\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 "Numero totale di righe eliminate: $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 "Operazione eseguita con successo\n"; $dbh->disconnect();
Quando viene eseguito il programma sopra menzionato, si ottiene il seguente risultato
Database aperto con successo Numero totale di righe eliminate: 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 Operazione eseguita con successo