Masters of CGI.Perl
 Сайт клуба знатоков CGI.Perl 
FAQ · Статьи · Конференция · Ссылки · Скрипты

Часто задаваемые Вопросы.. F.A.Q.

Дайджест от 15.11.2000

Если Вы не нашли ответ на свой вопрос в этом дайджесте, то попробуйте найти его в основной базе:

Ключевые слова

Напоминаем, Вы можете получать FAQ на свой e-mail !!! Достаточно подписаться на нашу почтовую конференцию.
 

  Название : Базы данных  

  1. Как направить SQL запрос в СУБД ?
  2. Как обеспечить одновременный доступ к DBM-файлу со стороны нескольких паралельно работающих программ ?
  3. Как я могу быстро очистить DBM-файл ?
  4. Как очистить содержимое всего DBM-файла ?
  5. Какие существуют основные операции над DBM-файлами ?
  6. В чем особенность DBM-файлов ?
  7. Где можно взять модули для работы с базами данных ?
  8. Какие СУБД поддерживаются проектом DBI ?
  9. Существует ли кроме текстовых файлов простая база данных под Perl ?
  10. Какие СУБД поддерживаются проектом DBI ?
  11. Существует ли кроме текстовых файлов простая база данных под Perl ?
  12. Я хочу какую-нибудь простейшую БД и прямо сейчас! Что такое база на "плоских" файлах?
  13. Как работать из perl с базами данных?

 

Как направить SQL запрос в СУБД ?


Воспользуйтесь модулями DBI(Database interface) и DBD(Database Driver) от CPAN:
use DBI;

$dbh=DBI->connect('DBI:driver','username','auth', { PrintError=>1, RaiseError =>1} )
or die "Error!";
$dbh->do(SQL) or die "Error!";
$sth=DBI->prepare(SQL) or die "Error!";    
$sth->execute or die "Error!";    
#.....
$sth->finish;
$dbh->disconnect;

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Как обеспечить одновременный доступ к DBM-файлу со стороны нескольких паралельно работающих программ ?


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

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Как я могу быстро очистить DBM-файл ?


Для быстрой очистки нужно удалить файл и открыть его заново в режиме создания, но появляется возможность подмены файла, и делает ее уязвимой для нападения.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Как очистить содержимое всего DBM-файла ?


Откройте базу с помощью функции dbmopen и присвойте хешу значение ()

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Какие существуют основные операции над DBM-файлами ?


Их несколько:
  • открытие базы данных: dbmopen %HASH, $FILENAME, 0666 or die "Error!"; - ассоцирует DBM-файл с хешем HASH.
  • Получение данных из базы: $data=$HASH{$key}
  • Удаление из базы данных: delete $HASH{$key};
  • Занесение в базу данных: $HASH{$key}=$value;
  • Проверка наличия данных: if (exists $HASH{$key}) { .... };
  • Закрытие базы данных: untie %HASH;

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

В чем особенность DBM-файлов ?


Доступ к данным DBM-базы осуществляется через хеш. А, следовательно, отличается простотой и удобством использования.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Где можно взять модули для работы с базами данных ?


По адресам:Вы сможете найти практически все необходимые модули.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Какие СУБД поддерживаются проектом DBI ?


Проект DBI содержит модули для работы с Oracle, Sybase, mSQL, mySQL, ingres, postgres и другими.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Существует ли кроме текстовых файлов простая база данных под Perl ?


Под язык Perl существует простая реализация БД. Это DBM. DBM-файлы содержат пары "ключ-значение". В терминологии реляционных БД Вы получаете БД, которая содержит всего одну таблицу с двумя полями.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Какие СУБД поддерживаются проектом DBI ?


Проект DBI содержит модули для работы с Oracle, Sybase, mSQL, mySQL, ingres, postgres и другими.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Существует ли кроме текстовых файлов простая база данных под Perl ?


Под язык Perl существует простая реализация БД. Это DBM. DBM-файлы содержат пары "ключ-значение". В терминологии реляционных БД Вы получаете БД, которая содержит всего одну таблицу с двумя полями.

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Я хочу какую-нибудь простейшую БД и прямо сейчас! Что такое база на "плоских" файлах?


Вы можете использовать простой текстовый файл с разделителями. Например, если мы пишем нечто типа телефонной книги, то вполне вероятно предположить, что ни в чьем имени, ни в номере телефона не встретится последовательность ::, так что именно ее и можно использовать в качестве разделителей.
Файл с данными может выглядеть так:
phones.data

Иванов И.И.::888-0000::Какая-то улица, 17, кв 40
Сидоров П.И.::888-8429::Другая улица, 5, кв 21
...... и тд.
тогда программа, которая читает данные, может быть примерно такого вида:
dump_phones.pl

#!/usr/bin/perl
$filename = 'phones.data';
# открываем файл
open DATA, $filename or die "Невозможно открыть $filename: $!";

# читаем построчно из файла
while (<DATA>) {
chomp; # удаление символа конца строки
# теперь в $_ есть строка и мы ее разделяем на переменные
($name, $phone, $address) = split(/::/);
# и выведем на печать
print "Имя: $name, телефон: $phone, адрес: $address\n";
}
close DATA;
Больше проблем возникает в случае, если надо удалить или отредактировать запись, но и их можно довольно просто и элегантно решить, если использовать механизм редактирования на месте (inplace edit) -- при использовании операции "ромб"(<>), можно читать из одного файла, а писать в другой:
change_phones.pl

#!/usr/bin/perl
$^I = '~'; # запускаем inplace edit
while (<>) { # Обратите внимание, что мы не открывали файл: при такой
#конструкции имя файла берется из командной строки
chomp;
($name, $phone, $address) = split(/::/);
if (.... некоторое условие, при котором мы оставляем наши данные ... )
{
print "$name::$phone::$address\n"; # теперь данные есть в новом файле
}
}
если запустить это программу как
change_phones.pl phones.data,
то в текущем каталоге будут два файла: phones.data, с записями, которые удовлетворили нашим условиям и phones.data  - предыдущая копия.
Также, во многих случаях, всю программу такого типа можно записать как one-liner:
perl -i~ -n -e 'print if(... условие)'


Автор: Павел Аммосов

Дата добавления: 6.09.2000 Прислать свои комментарии  Наверх 

Как работать из perl с базами данных?


DBI. Это унифицированный программный интерфейс, придуманный для того, чтобы с разными базами можно было работать одинаково (за исключением, конечно, специфики самих SQL-запросов). Устанавливаете модуль DBI, ищете и устанавливаете DBD::something - драйвер-связку между DBI и нужной вам базой. Oracle, MySQL, PostgreSQL и куча других СУБД поддерживаются DBI+DBD. Читаете perldoc DBI

Источник: FIDO - RU.CGI.PERL (FAQ created by SLY Golovanov, 2:5020/794.13)

Дата добавления: 30.08.2000 Прислать свои комментарии  Наверх 

Сайт клуба знатоков CGI.Perl - Masters of CGI.Perl
Designed by MoveR Studio © 2000  - | -  Вопросы? Предложения? пишите