我怎样才能打印DBIx :: Class结果?

时间:2010-10-27 17:27:01

标签: perl dbix-class

我想像这样漂亮地打印DBIx :: Class :: ResultSet结果:

my $schema = MyDatabase::Main->connect('dbi:SQLite:db/example.db');
my $rs = $schema->resultset('Track')->all()
# then print $rs with all of those feilds

我找到了DBIx :: SQLCrosstab :: Format类,但它似乎只适用于自己的查询。

2 个答案:

答案 0 :(得分:4)

我不知道任何DBIC 漂亮的打印模块,但它很容易在CPAN上的任何文本,html或其他类型的表格输出模块中实现。

以下是使用Text::Table

的快速工作示例
use 5.012;
use warnings;
use List::MoreUtils 'zip';
use Text::Table;

# my database with Album schema from DBIx::Class::Manual::Intro
use MySchema;
my $db     = MySchema->connect( "DBI:SQLite:myschema_db" );
my $album  = $db->resultset( 'Album' );

# get column names for the Album table
my @cols   = $album->result_source->columns;

# create header with these column names
my $table  = Text::Table->new( header( @cols ) );

# add each Album row to table output
while (my $cd = $album->next) {
    $table->add( map { $cd->get_column( $_ ) } @cols );
}

print $table;    # => tabular text output

# adds | separator between header labels
sub header {
    my @sep = (\' | ') x @_;
    zip @_, @sep;
}

这将输出以下测试数据:

albumid | artist      | title          | rank | 
1       | Lou Reed    | Transformer    |      | 
2       | Lou Reed    | Berlin         |      | 
3       | David Bowie | Ziggy Stardust |      | 
4       | Japan       | Tin Drum       |      |

/ I3az /

答案 1 :(得分:2)

如果您正在寻找真正漂亮的输出,请使用上面的draegtun示例。但是,如果您真的只想在不使用所有源数据的情况下使用Data :: Dumper吐出DBIx :: Class :: Row对象,则可以将此挂钩添加到结果类中(或者更好地将其添加到基本结果中)所有架构结果的类)

sub _dumper_hook {
  $_[0] = bless { %{ $_[0] }, _source_handle=>undef }, ref($_[0]); 
}
$Data::Dumper::Freezer = '_dumper_hook';