用于报告的 Perl 框架 - 动态创建变量
Perl framework for report - creating variable dynamically
我正在尝试为 Perl 设计一个框架,其中 sql 文件将保存在一个单独的文件中。 Perl 脚本应该读取 SQL 文件并确定选择了多少列,它应该迭代 SQL 查询的输出并将它们写入 CSV 文件。最初我想从简单的查询开始,如:
select col1, col2 from table1;
因此 Perl 脚本应该迭代 SQL 输出并创建 CSV 文件,如下所示:
val1a,val1b
val2a,val2b
val3a,val3b
我面临的问题是我不知道如何动态创建变量数。假设 SQL 查询中有 2 列,我必须有 2 个变量来存储列值并将其写入输出文件。如果有 3 列,它应该能够在不更改脚本的情况下创建 3 个变量。
请告知是否有支持此功能的Perl外部模块。
你do not want to create dynamic variables。相反,您想使用哈希。
如果您不熟悉这个概念,请看一看perlref and perlreftut. For your SQL interaction you should start by reading the DBI documentation, specifically fetchrow_hashref
and fetchrow_arrayref
. To write the data to CSV, use Text::CSV。
use strict;
use warnings;
use DBI;
use Text::CSV;
use autodie;
my $csv = Text::CSV->new;
open my $fh, '>', 'output.csv';
my $dbh = DBI->connect( ... );
# write headings
$csv->print($fh, ['val1', 'val2']);
my $sth = $dbh->prepare('SELECT val1, val2 FROM table1');
$sth->execute;
while (my $res = $dbh->fetchrow_arrayref) {
$fh->print($fh, $res);
}
close $fh;
我正在尝试为 Perl 设计一个框架,其中 sql 文件将保存在一个单独的文件中。 Perl 脚本应该读取 SQL 文件并确定选择了多少列,它应该迭代 SQL 查询的输出并将它们写入 CSV 文件。最初我想从简单的查询开始,如:
select col1, col2 from table1;
因此 Perl 脚本应该迭代 SQL 输出并创建 CSV 文件,如下所示:
val1a,val1b
val2a,val2b
val3a,val3b
我面临的问题是我不知道如何动态创建变量数。假设 SQL 查询中有 2 列,我必须有 2 个变量来存储列值并将其写入输出文件。如果有 3 列,它应该能够在不更改脚本的情况下创建 3 个变量。
请告知是否有支持此功能的Perl外部模块。
你do not want to create dynamic variables。相反,您想使用哈希。
如果您不熟悉这个概念,请看一看perlref and perlreftut. For your SQL interaction you should start by reading the DBI documentation, specifically fetchrow_hashref
and fetchrow_arrayref
. To write the data to CSV, use Text::CSV。
use strict;
use warnings;
use DBI;
use Text::CSV;
use autodie;
my $csv = Text::CSV->new;
open my $fh, '>', 'output.csv';
my $dbh = DBI->connect( ... );
# write headings
$csv->print($fh, ['val1', 'val2']);
my $sth = $dbh->prepare('SELECT val1, val2 FROM table1');
$sth->execute;
while (my $res = $dbh->fetchrow_arrayref) {
$fh->print($fh, $res);
}
close $fh;