Как я могу довольно распечатать результаты DBIx :: Class? - PullRequest
5 голосов
/ 27 октября 2010

Я бы хотел распечатать результаты 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 ]

4 голосов
/ 01 ноября 2010

Я не знаю ни одного модуля DBIC pretty print , но его легко реализовать из любого множества текстовых, html или других типов табличных модулей вывода на CPAN.

Ниже приведен мой быстрый рабочий пример с использованием 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 /

2 голосов
/ 07 декабря 2010

Если вы ищете действительно симпатичный вывод, используйте пример draegtun выше.Однако, если вы действительно хотите использовать Data :: Dumper для выделения объекта DBIx :: Class :: Row без всех исходных данных, вы можете добавить этот хук в свой класс результатов (или, что еще лучше, в базовый результат).класс для всех результатов вашей схемы)

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