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