PostgreSQL может быть интегрирован с Perl с помощью модуля Perl DBI, который является модулем доступа к базе данных для языка программирования Perl. Он определяет набор методов, переменных и соглашений, которые обеспечивают стандартный интерфейс базы данных.
Вот простые шаги для установки модуля DBI на вашем компьютере с 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
Если вам нужно установить драйвер SQLite для DBI, его можно установить следующим образом:
$ 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
Прежде чем вы начнете использовать интерфейс Perl PostgreSQL, найдите файл pg_hba.conf в вашем каталоге установки PostgreSQL и добавьте следующую строку —
# IPv4 local connections: host all all 127.0.0.1/32 md5
Вы можете запустить / перезапустить сервер postgres, если он не работает, с помощью следующей команды —
[root@host]# service postgresql restart Stopping postgresql service: [ OK ] Starting postgresql service: [ OK ]
API интерфейса DBI
Ниже приведены важные подпрограммы DBI, которые могут удовлетворить ваши требования для работы с базой данных SQLite из вашей программы Perl. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию Perl DBI.
С. Нет. | API и описание |
---|---|
1 |
DBI → connect ($ data_source, «userid», «password», \% attr) Устанавливает соединение базы данных или сеанс с запрошенным $ data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно. Источник данных имеет вид: DBI: Pg: dbname = $ database; host = 127.0.0.1; port = 5432 Pg — это имя драйвера PostgreSQL, а testdb — имя базы данных. |
2 |
$ ДВГ → сделать ($ SQL) Эта подпрограмма подготавливает и выполняет один оператор SQL. Возвращает количество затронутых строк или undef при ошибке. Возвращаемое значение -1 означает, что количество строк неизвестно, неприменимо или недоступно. Здесь $ dbh — дескриптор, возвращаемый вызовом DBI → connect (). |
3 |
$ ДВГ → подготовить ($ SQL) Эта подпрограмма подготавливает оператор для последующего выполнения ядром базы данных и возвращает ссылку на объект дескриптора оператора. |
4 |
$ STH → Execute () Эта процедура выполняет любую обработку, необходимую для выполнения подготовленного оператора. Undef возвращается, если произошла ошибка. Успешное выполнение всегда возвращает true независимо от количества затронутых строк. Здесь $ sth — дескриптор оператора, возвращаемый вызовом $ dbh → prepare ($ sql). |
5 |
$ STH → fetchrow_array () Эта процедура извлекает следующую строку данных и возвращает ее в виде списка, содержащего значения полей. Пустые поля возвращаются как неопределенные значения в списке. |
6 |
$ DBI :: эээ Это эквивалентно $ h → err, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственный код ошибки ядра базы данных из последнего вызванного метода драйвера. |
7 |
$ DBI :: ErrStr Это эквивалентно $ h → errstr, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственное сообщение об ошибке ядра СУБД из последнего вызванного метода DBI. |
8 |
$ dbh-> разъединение () Эта процедура закрывает соединение с базой данных, ранее открытое с помощью вызова DBI → connect (). |
DBI → connect ($ data_source, «userid», «password», \% attr)
Устанавливает соединение базы данных или сеанс с запрошенным $ data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно.
Источник данных имеет вид: DBI: Pg: dbname = $ database; host = 127.0.0.1; port = 5432 Pg — это имя драйвера PostgreSQL, а testdb — имя базы данных.
$ ДВГ → сделать ($ SQL)
Эта подпрограмма подготавливает и выполняет один оператор SQL. Возвращает количество затронутых строк или undef при ошибке. Возвращаемое значение -1 означает, что количество строк неизвестно, неприменимо или недоступно. Здесь $ dbh — дескриптор, возвращаемый вызовом DBI → connect ().
$ ДВГ → подготовить ($ SQL)
Эта подпрограмма подготавливает оператор для последующего выполнения ядром базы данных и возвращает ссылку на объект дескриптора оператора.
$ STH → Execute ()
Эта процедура выполняет любую обработку, необходимую для выполнения подготовленного оператора. Undef возвращается, если произошла ошибка. Успешное выполнение всегда возвращает true независимо от количества затронутых строк. Здесь $ sth — дескриптор оператора, возвращаемый вызовом $ dbh → prepare ($ sql).
$ STH → fetchrow_array ()
Эта процедура извлекает следующую строку данных и возвращает ее в виде списка, содержащего значения полей. Пустые поля возвращаются как неопределенные значения в списке.
$ DBI :: эээ
Это эквивалентно $ h → err, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственный код ошибки ядра базы данных из последнего вызванного метода драйвера.
$ DBI :: ErrStr
Это эквивалентно $ h → errstr, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственное сообщение об ошибке ядра СУБД из последнего вызванного метода DBI.
$ dbh-> разъединение ()
Эта процедура закрывает соединение с базой данных, ранее открытое с помощью вызова 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 "Opened database successfully\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 "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();
Когда приведенная выше программа будет выполнена, она создаст таблицу COMPANY в вашей тестовой базе данных и отобразит следующие сообщения:
Opened database successfully 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 "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();
Когда указанная выше программа будет выполнена, она создаст указанные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully 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 "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();
Когда вышеуказанная программа будет выполнена, она даст следующий результат —
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
ОБНОВЛЕНИЕ Операция
Следующий код 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 "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();
Когда вышеуказанная программа будет выполнена, она даст следующий результат —
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
УДАЛЕНИЕ Операция
Следующий код 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 "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();
Когда вышеуказанная программа будет выполнена, она даст следующий результат —