Perl: хранить столбец из Mysql-таблицы в Perl-Hash - PullRequest
1 голос
/ 27 марта 2011

У меня проблемы с Mysql и Perl.

Я кодирую Web-сканер и сохраняю TODO-List в таблице Mysql.

Теперь, в начале скрипта, я хочу загрузить TODO-List из Mysql в Perl Hash, чтобы я не пересматривал URL.

  • Mysql имеет следующее Структура:

Таблица "todo" - уникальный идентификатор "todoid" - TODO-URL "todourl"

  • Хеш TODO в Perl выглядит так:

my% todo = ();

$ VAR1 = 'http://www.example.com/661/';

Как я могу загрузить все URL-адреса таблицы Mysql в мой хеш todo?

Ответы [ 3 ]

3 голосов
/ 27 марта 2011

вы можете использовать DBI, как предложил Алан, но с меньшим количеством кода:

$todo = $dbh->selectall_hashref('SELECT todoid, todourl FROM todo', 'todoid');

Как видите, я не использовал dbi подготовить, выполнить, извлечь и завершить, потому что метод selectall_hashref делает все за нас.

См. Онлайн документацию: http://search.cpan.org/~timb/DBI-1.616/DBI.pm#selectall_hashref

1 голос
/ 27 марта 2011

Class::DBI выполнит запрос и преобразование для вас. Однако я считаю, что DBIx::Class сейчас более популярно.

1 голос
/ 27 марта 2011

Подключиться к базе данных, используя DBI, подготовить запрос, выполнить запрос и получить результаты:

#!/usr/bin/env perl

use strict;
use warnings;

use DBI;

my %db_config = (
    'database' => 'your_database_name',
    'hostname' => 'your_hostname',
    'port'     => 'your_port',
    'username' => 'your_username',
    'password' => 'your_password',
);
my $dbh = DBI->connect(
   "DBI:mysql:database=$db_config{database};host=$db_config{hostname};port=$db_config{port}",
    $db_config{'username'}, $db_config{'password'},
) or die DBI->errstr();
my $sth = $dbh->prepare('SELECT todoid, todourl FROM todo')
  or die DBI->errstr();
$sth->execute() or die DBI->errstr();

my %todo;
while ( my $row = $sth->fetchrow_hashref() ) {
    $todo{ $row->{'todourl'} } = $row->{'todoid'};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...