2010/09/09

SQLiteのデータをCSVで出力する

sqliteで管理しているデータをCSVで出力する必要があったので,sqlite3にmysqlの-eオプションみたいなのが無いのか確認したところ,下記の方法で出力先と出力方法を変更できた.

sqlite> .mode csv
sqlite> .output hoge.csv

後は普通にselectを発行するとSTDOUTじゃなくてhoge.csvにデータが書き込まれる

他のmode等は.helpで確認可能.

2010/09/08

Iterator::ToArray

Iterator::ToArrayを作成した。
名前の通りIteratorをArrayに変換する。

作成の動機はHTML::Template::Proに直接IteratorやORMのrow objectを渡せないのでiteratorをarray(ref)?に変換したかったから。

use HTML::Template::Pro;
use MyDB; # using DBIx::Skinny
use Iterator::ToArray qw/to_array/;

my $db = MyDB->new(...);
my $iter = $db->search(
    'hige_tbl',
    { length >= 30 }
);

my @array = to_array $iter, sub {
    +{ id => $_->id, 'length' => $_->length }
};

my $html = HTML::Template::Pro->new(
    filename => $file
);
$html->param( hige_loop => \@array );

毎回↓みたいにwhileで$iter->next()を呼ぶのにいい加減あきた。
my @array;
while ( defined ( my $row = $iter->next() ) {
    push @array, {
        id     => $row->id,
        length => $row->length,
    };
}