我遇到了Mysql和Perl的问题。
我正在编写一个Web-Crawler,我将TODO-List保存在Mysql表中。
现在,在脚本的开头,我想将Mysql中的TODO-List加载到Perl Hash中,这样我就不会重新抓取网址。
表“todo” - 独特的Id“todoid” - TODO-urls“todourl”
我的%todo =();
$ VAR1 ='http://www.example.com/661/';
如何在我的todo哈希中加载Mysql表的所有Urls?
答案 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
现在更受欢迎。