Perl | Управление базой данных с помощью DBI

Опубликовано: 17 Августа, 2021

Предпосылки:

  • Введение в Perl
  • Системы баз данных

Создание программ баз данных - одно из наиболее распространенных применений Perl. Используя Perl, мы можем создавать надежные веб-приложения вместе с базой данных для управления всеми данными. Он обеспечивает отличную поддержку интерфейсов и широкий спектр форматов баз данных. Для подключения к базе данных и выполнения запросов к ней Perl предоставляет модуль под названием DBI . DBI - это интерфейс базы данных для связи с серверами баз данных, которые используют язык структурированных запросов (SQL) для получения данных.

Доступ к базе данных в Perl обычно занимает два шага. Модуль DBI предоставляет API для доступа к базе данных. Программа использует функции DBI для управления базой данных. Второй этап доступа к базе данных из Perl - это модуль драйвера базы данных (DBD). Для каждой отдельной системы баз данных требуется собственный драйвер. Такой подход позволяет прикладной программе базы данных Perl быть относительно независимой от конкретной базы данных, к которой она будет обращаться.

Установка: Чтобы установить модуль DBI, откройте терминал, введите следующую команду и нажмите Enter:

 perl -MCPAN -e 'установить Bundle :: DBI'

Это автоматически загрузит и установит драйвер для модуля DBI, чтобы обеспечить соединение базы данных с Perl.

Как следует из названия, DBI предоставляет независимый интерфейс для программ Perl. Это означает, что код Perl не зависит от базы данных, запущенной в серверной части. Модуль DBI обеспечивает абстракцию , т. Е. Мы можем писать наш код, не беспокоясь о базе данных, которая работает на сервере.

Чтобы импортировать функции модуля независимого интерфейса базы данных, нам необходимо импортировать или включить модуль с помощью прагмы «use». use DBI позволяет нам использовать модуль DBI для управления базой данных, к которой мы подключаемся.

Syntax: use DBI;

Подключение к базе данных:

Метод connect() используется для подключения к указанной базе данных. Требуется три аргумента:

  1. Строка из трех значений, разделенных знаком «:», в этом примере это «DBI: mysql: test». Первое значение указывает, что мы используем DBI. второе значение указывает механизм базы данных, которым в данном случае является MySQL. третье значение указывает имя базы данных, к которой вы хотите подключиться.
  2. Следующим аргументом метода connect () является имя пользователя. В этом случае пользователь root.
  3. Последний аргумент - это пароль вашей локальной системы. В этом примере это "пароль".

Синтаксис:

my $dbh = DBI->connect (“DBI:mysql:test”, “root”, “password”) or die “Can’t connect: ” . DBI->errstr();

Оператор «or die» завершает программу, если ей не удалось установить соединение с базой данных, с сообщением об ошибке. Метод errstr() возвращает строку, содержащую все ошибки, возникшие при подключении к базе данных.

Подготовка запросов:

Метод prepare() принимает один параметр - SQL-запрос, который должен быть выполнен. Запрос SQL принимается в виде строки, содержащей инструкцию SQL. Этот оператор SQL аналогичен операторам SQL, которые вы выполняете в MySQL. Он возвращает объект, называемый дескриптором оператора, который можно использовать для выполнения запросов.

Синтаксис:

my $sth = $dbh->prepare( ” CREATE TABLE emp( id INT PRIMARY KEY, name VARCHAR(10), salary INT, “);

Теперь запрос готов к выполнению. Обратите внимание, что в приведенном выше запросе мы создаем таблицу со столбцами id , name и salary.

Выполнение запросов:

Метод execute() выполняет запрос, написанный в методе prepare() Не требует никаких аргументов. Он вызывается с использованием объекта дескриптора инструкции, созданного при выполнении инструкции «приготовить ».

Синтаксис:

$sth->execute();

Получение значений из результата:

Метод fetchrow() используется для извлечения следующей строки данных из результата выполненного запроса. Если выполняется запрос выбора, то метод fetchrow() выбирает следующую строку из результата. Он возвращает одну строку из результата, который можно присвоить переменным. При использовании в цикле while мы можем получить и отобразить все строки в базе данных с помощью fetchrow() .

Синтаксис:

($id, $name, $salary) = $sth->fetchrow();

Значения каждого столбца хранятся в трех переменных.

Функция fetchrow_array() возвращает массив, содержащий строку из результата

Синтаксис:

my @row = $sth->fetchrow_array( )

Отключение:

Как только все запросы будут выполнены, нам нужно отключить соединение. Это делается с помощью функции disconnect() . Это позволит сценарию Perl правильно разорвать соединение. Отсутствие отключения от базы данных не приведет к возникновению ошибок. Как правило, это хорошая практика.

Синтаксис:

$dbh->disconnect();

Создание базы данных в MySQL:

MySQL должен быть установлен в вашей системе и требуется базовое знание MySQL.

  • Войдите на свой сервер MySql.
  • Создайте базу данных под названием « test ». Мы подключимся к этой базе данных, поэтому убедитесь, что
    имя « тест »
  • Убедитесь, что в этой базе данных нет таблиц, так как мы будем создавать таблицу с именем «emp» и
    вставить значения в эту таблицу

Собираем все вместе:

После того, как вы создали базу данных в MySQL , мы можем получить доступ к этой базе данных в Perl. Сначала мы создаем таблицу emp в базе данных под названием test со схемой: ( id INTEGER PRIMARY KEY, name VARCHAR (10), salary INT, dept INT). После того, как таблица создана без ошибок, мы вставляем значения в таблицу.
После того, как значения вставлены, мы можем запросить таблицу, чтобы выбрать все строки и отобразить их пользователю с помощью функции fetchrow() .

Пример:




#!/usr/bin/perl -w
use DBI;
# definition of variables
# name of the database. In this case,
# the name of the database in my local
# system is test.
# user in this case is root
$user = "root" ;
# this is the password for root
$password = "password" ;
# connect to MySQL database
my $dbh = DBI-> connect ( "DBI:mysql:test" ,
$user ,
$password )
or die "Can't connect to database: $DBI::errstr " ;
print "connected to the database " ;
# the test database contains a table called emp
# the schema : (id INTEGER PRIMARY KEY,
# name VARCHAR(10), salary INT, dept INT)
# let us first insert some values
# prepare the query to
# create the emp table
my $sth = $dbh ->prepare("CREATE TABLE emp(id INT PRIMARY KEY,
name VARCHAR(10),
salary INT, dept INT)");
# execute the query
# now, the table is created
$sth ->execute();
# prepare the query
my $sth = $dbh ->prepare("INSERT INTO emp
VALUES(?, ?, ?, ?)");
# define the variables to be inserted
# into the table
my $id = 1;
my $name = "adith" ;
my $salary = 1000;
my $dept = 2;
# insert these values into the emp table.
$sth ->execute( $id , $name , $salary , $dept );
# insert some more rows into the table.
$sth ->execute( $id + 1, $name ,
$salary + 100, $dept - 1);
# insert more rows
$sth ->execute( $id + 2, "Tyrion" ,
$salary + 1000, $dept + 1);
print "Successfully inserted values into the table " ;
# now, select all the rows from the table.
my $sth = $dbh ->prepare( "SELECT * FROM emp" );
# execute the query
$sth ->execute();
# Retrieve the results of a row of data and print
print " Query results: ================================================ " ;
# fetch the contents of the table
# row by row using fetchrow_array() function
while ( my @row = $sth ->fetchrow_array())
{
print "@row " ;
}
# if the function cannot be execute, show a warning.
warn "Problem in retrieving results" , $sth ->errstr( ), " "
if $sth ->err();
print " " ;
# select particular columns.
# prepare the query
my $sth = $dbh ->prepare( "SELECT name, salary FROM emp" );
# execute the query
$sth ->execute( );
# Retrieve the results of a row of data and print
print " Query results: ================================================ " ;
while (( $name , $sal ) = $sth ->fetchrow_array())
{
print "Name: $name, salary: $sal " ;
}
warn "Problem in retrieving results" , $sth ->errstr( ), " "
if $sth ->err( );
# end of program
exit ;

Выход :