English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O PostgreSQL pode ser integrado com o Perl usando o módulo perldbi, que é um módulo de acesso a banco de dados do Perl. Ele define um conjunto de métodos, variáveis e convenções que fornecem uma interface padrão para o banco de dados.
A seguir está no seu Linux/Passos simples para instalar o módulo DBI em 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
Se você precisar instalar o driver SQLite para DBI, pode seguir a seguinte instalação
$ 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
Antes de começar a usar o interface Perl PostgreSQL, localize o arquivo pg_hba.conf na pasta de instalação do PostgreSQL e adicione a linha a seguir.
# IPv4 Conexões locais: host all all 127.0.0.1/32 md5
Se o servidor postgres não estiver em execução, você pode usar o seguinte comando para iniciá-lo/Reiniciando o servidor postgres-
[root@host]# service postgresql restart Parando o serviço postgresql: [ OK ] Iniciando o serviço postgresql: [ OK ]
A seguir estão algumas rotinas importantes do DBI, que podem atender às suas necessidades ao usar o banco de dados SQLite em programas Perl. Se você está buscando aplicações mais complexas, você pode consultar a documentação oficial do Perl DBI.
N.º | API & Descrição |
---|---|
1 | DBI→connect($data_source, "userid", "password", \%attr) Estabelece uma conexão ou sessão com o banco de dados solicitado $data_source. Se a conexão for bem-sucedida, retorna um objeto manipulador de banco de dados. O formato do Datasource é: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg é o nome do driver do PostgreSQL, testdb é o nome do banco de dados. |
2 | $dbh→do($sql) Esta rotina prepara e executa uma declaração SQL. Ao retornar, indica o número de linhas afetadas ou não definidas. O valor de retorno-1Representa o número de linhas desconhecido, inaplicável ou indisponível. Aqui, $dbh é o manipulador retornado pela chamada DBI → connect(). |
3 | $dbh→prepare($sql) Prepara uma declaração para execução posterior pelo motor de banco de dados e retorna uma referência para o objeto manipulador de declaração. |
4 | $sth→execute() Executa qualquer tratamento necessário para executar a declaração preparada. Se ocorrer um erro, retorna 'undef'. Sempre retorna 'true' após uma execução bem-sucedida, independentemente do número de linhas afetadas. Aqui, $sth é um manipulador de declaração retornado pela chamada $dbh→prepare($sql). |
5 | $sth→fetchrow_array() Obtém a próxima linha de dados e a retorna como uma lista que contém valores de campos. Os campos em branco são retornados como valor 'undef' na lista. |
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 morrer $DBI::errstr; print "Banco de dados aberto com sucesso\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 morrer $DBI::errstr; print "Banco de dados aberto com sucesso\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->desconectar();
当执行上面给定的程序时,它将在 testdb 中创建 COMPANY 表,并显示以下消息-
Banco de dados aberto com sucesso 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 })}} ou morrer $DBI::errstr; print "Banco de dados aberto com sucesso\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 morrer $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 )); $rv = $dbh->do($stmt) ou morrer $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway',}} 20000.00 )); $rv = $dbh->do($stmt) ou morrer $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 morrer $DBI::errstr; print "Registros criados com sucesso\n"; $dbh->desconectar();
Quando o programa acima for executado, ele criará os registros fornecidos na tabela COMPANY e exibirá as seguintes duas linhas
Banco de dados aberto com sucesso Registros criados com sucesso
O programa Perl a seguir mostra como obter e exibir os registros do banco de dados COMPANY criado no exemplo anterior-
#!/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 morrer $DBI::errstr; print "Banco de dados aberto com sucesso\n"; my $stmt = qq(SELECT id, name, address, salary FROM COMPANY;); my $sth = $dbh->preparar( $stmt ); my $rv = $sth->execute() ou morrer $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 "Operação concluída com sucesso\n"; $dbh->desconectar();
Quando o programa acima for executado, será gerado o seguinte resultado
Banco de dados aberto com sucesso 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 Operação concluída com sucesso
O código Perl a seguir mostra como usar a cláusula UPDATE para atualizar qualquer registro, então do nosso banco de dados COMPANY e exibir os registros atualizados:
#!/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 morrer $DBI::errstr; print "Banco de dados aberto com sucesso\n"; my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;); my $rv = $dbh->do($stmt) ou morrer $DBI::errstr; if( $rv < 0 ) { print $DBI::errstr; } else { print "Número total de linhas atualizadas: $rv\n"; } $stmt = qq(SELECT id, name, address, salary FROM COMPANY;); my $sth = $dbh->preparar( $stmt ); $rv = $sth->execute() ou morrer $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 "Operação concluída com sucesso\n"; $dbh->desconectar();
Quando o programa acima for executado, será gerado o seguinte resultado
Banco de dados aberto com sucesso Número total de linhas atualizadas: 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 Operação concluída com sucesso
O código Perl a seguir mostra como usar a cláusula DELETE para excluir qualquer registro, então do banco de dados COMPANY-obter e exibir os registros restantes
#!/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 morrer $DBI::errstr; print "Banco de dados aberto com sucesso\n"; my $stmt = qq(DELETE FROM COMPANY WHERE ID=;2;); my $rv = $dbh->do($stmt) ou morrer $DBI::errstr; if( $rv < 0 ) { print $DBI::errstr; } else { print "Número total de linhas deletadas: $rv\n"; } $stmt = qq(SELECT id, name, address, salary FROM COMPANY;); my $sth = $dbh->preparar( $stmt ); $rv = $sth->execute() ou morrer $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 "Operação concluída com sucesso\n"; $dbh->desconectar();
Quando o programa acima for executado, será gerado o seguinte resultado
Banco de dados aberto com sucesso Número total de linhas deletadas: 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 Operação concluída com sucesso