PostgreSQL - Giao diện Perl

Cài đặt

PostgreSQL có thể được tích hợp với Perl bằng cách sử dụng mô-đun Perl DBI, đây là một mô-đun truy cập cơ sở dữ liệu cho ngôn ngữ lập trình Perl. Nó định nghĩa một tập hợp các phương thức, biến và quy ước cung cấp giao diện cơ sở dữ liệu chuẩn.

Dưới đây là các bước đơn giản để cài đặt mô-đun DBI trên máy Linux / Unix của bạn -

$ 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

Nếu bạn cần cài đặt trình điều khiển SQLite cho DBI, thì nó có thể được cài đặt như sau:

$ 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

Trước khi bạn bắt đầu sử dụng giao diện Perl PostgreSQL, hãy tìm pg_hba.conf trong thư mục cài đặt PostgreSQL của bạn và thêm dòng sau:

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

Bạn có thể khởi động / khởi động lại máy chủ postgres, trong trường hợp nó không chạy, bằng cách sử dụng lệnh sau:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

API giao diện DBI

Sau đây là các quy trình DBI quan trọng, có thể đáp ứng đủ yêu cầu của bạn để làm việc với cơ sở dữ liệu SQLite từ chương trình Perl của bạn. Nếu bạn đang tìm kiếm một ứng dụng phức tạp hơn, thì bạn có thể xem tài liệu chính thức của Perl DBI.

S. Không. API & Mô tả
1

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

Thiết lập kết nối cơ sở dữ liệu hoặc phiên, tới $ data_source được yêu cầu. Trả về một đối tượng xử lý cơ sở dữ liệu nếu kết nối thành công.

Datasource có dạng như sau: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg là tên trình điều khiển PostgreSQL và testdb là tên của cơ sở dữ liệu.

2

$dbh→do($sql)

Quy trình này chuẩn bị và thực thi một câu lệnh SQL duy nhất. Trả về số lượng hàng bị ảnh hưởng hoặc hoàn tác do lỗi. Giá trị trả về -1 có nghĩa là số hàng không được biết, không áp dụng được hoặc không có sẵn. Ở đây $ dbh là một xử lý được trả về bởi lệnh gọi DBI → connect ().

3

$dbh→prepare($sql)

Quy trình này chuẩn bị một câu lệnh để thực thi sau bởi cơ sở dữ liệu và trả về một tham chiếu đến một đối tượng xử lý câu lệnh.

4

$sth→execute()

Quy trình này thực hiện bất kỳ quá trình xử lý nào cần thiết để thực hiện câu lệnh đã chuẩn bị. Một undef được trả về nếu một lỗi xảy ra. Thực thi thành công luôn trả về true bất kể số hàng bị ảnh hưởng. Ở đây $ sth là một xử lý câu lệnh được trả về bởi lệnh gọi $ dbh → chuẩn bị ($ sql).

5

$sth→fetchrow_array()

Quy trình này tìm nạp dòng dữ liệu tiếp theo và trả về nó dưới dạng danh sách chứa các giá trị trường. Các trường rỗng được trả về dưới dạng giá trị undef trong danh sách.

6

$DBI::err

Điều này tương đương với $ h → err, trong đó $ h là bất kỳ loại xử lý nào như $ dbh, $ sth hoặc $ drh. Điều này trả về mã lỗi công cụ cơ sở dữ liệu gốc từ phương thức trình điều khiển cuối cùng được gọi.

7

$DBI::errstr

Điều này tương đương với $ h → errstr, trong đó $ h là bất kỳ kiểu xử lý nào như $ dbh, $ sth hoặc $ drh. Điều này trả về thông báo lỗi công cụ cơ sở dữ liệu gốc từ phương thức DBI cuối cùng được gọi.

số 8

$dbh->disconnect()

Quy trình này đóng một kết nối cơ sở dữ liệu đã mở trước đó bằng cuộc gọi tới DBI → connect ().

Kết nối với Cơ sở dữ liệu

Mã Perl sau đây cho thấy cách kết nối với cơ sở dữ liệu hiện có. Nếu cơ sở dữ liệu không tồn tại, thì nó sẽ được tạo và cuối cùng một đối tượng cơ sở dữ liệu sẽ được trả về.

#!/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";

Bây giờ, chúng ta hãy chạy chương trình đã cho ở trên để mở cơ sở dữ liệu của chúng ta testdb; nếu cơ sở dữ liệu được mở thành công thì nó sẽ đưa ra thông báo sau:

Open database successfully

Tạo bảng

Chương trình Perl sau sẽ được sử dụng để tạo bảng trong cơ sở dữ liệu đã tạo trước đó:

#!/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();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra bảng COMPANY trong testdb và nó sẽ hiển thị các thông báo sau:

Opened database successfully
Table created successfully

INSERT hoạt động

Chương trình Perl sau đây cho thấy cách chúng ta có thể tạo các bản ghi trong bảng COMPANY của chúng ta được tạo trong ví dụ trên:

#!/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();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully
Records created successfully

CHỌN hoạt động

Chương trình Perl sau đây cho thấy cách chúng tôi có thể tìm nạp và hiển thị các bản ghi từ bảng COMPANY của chúng tôi được tạo trong ví dụ trên:

#!/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();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

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

CẬP NHẬT Hoạt động

Mã Perl sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY của chúng ta -

#!/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();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

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

Thao tác DELETE

Mã Perl sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY của chúng ta -

#!/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();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

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