Perl:在Perl-Hash中存储Mysql表中的列

时间:2011-03-27 11:46:40

标签: mysql perl hash

我遇到了Mysql和Perl的问题。

我正在编写一个Web-Crawler,我将TODO-List保存在Mysql表中。

现在,在脚本的开头,我想将Mysql中的TODO-List加载到Perl Hash中,这样我就不会重新抓取网址。

  • Mysql有以下内容 结构:
  

表“todo” - 独特的Id“todoid” -   TODO-urls“todourl”

  • Perl中的TODO Hash是这样的:
  

我的%todo =();

     

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

如何在我的todo哈希中加载Mysql表的所有Urls?

3 个答案:

答案 0 :(得分:3)

您可以像Alan建议的那样使用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 :(得分:1)

使用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'};
}

答案 2 :(得分:1)

Class::DBI会为您进行查询和转换。但是,我相信DBIx::Class现在更受欢迎。