Upload
karupanerura-xmp
View
4.148
Download
1
Embed Size (px)
DESCRIPTION
Chiba.pm #2
Citation preview
DBI DBIx::* SQL::* etc...
Perl RDBMS Programming
id:karupanerura
13年3月23日土曜日
about.me
id:karupanerura
かるぱねるら
web engineer
c/js/perl/elisp
さいきんH本読んでる
MF
13年3月23日土曜日
あじぇんだ!!
DBI
DBIx::Sunny
and more...
まとめ
13年3月23日土曜日
DBI!!!!!
13年3月23日土曜日
DBIってなに?
PerlでRDBMSを透過的に扱うためのインターフェース
対応するDBD::*をcpanmしておくとそいつが通信とかをよしなにしてくれる
DBIつかう人はSQL文の互換性だけきにすればいい
細かい機能は一部非互換だったりするが割愛
13年3月23日土曜日
DBIをいれる
% cpanm DBI
% cpanm DBD::mysql # pg,Oracle,DB2,etc...
13年3月23日土曜日
DBIをつかう
use DBI;
my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
# .....
$dbh->disconnect;
13年3月23日土曜日
DBIをつかう
use DBI;
# SQLite(memory)my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
# SQLite(file)my $dbh = DBI->connect('dbi:SQLite:dbname=local.sqlite');
# MySQLmy $dbh = DBI->connect( 'dbi:mysql:database=hoge;host=localhost', 'username', 'password',);
13年3月23日土曜日
べんりメソッド
selectrow_*系
selectall_*系
selectcol_*系
do
prepare(_cached)?/execute
13年3月23日土曜日
よくつかうやつ
selectrow_array / selectrow_hashref
selectall_arrayref
selectcol_arrayref
do
13年3月23日土曜日
selectrow_array
# こんなかんじでかえってくる# (1)
my ($id) = $dbh->selectrow_array( 'SELECT id FROM chibapm WHERE name = ?', undef, 'kaztr');
13年3月23日土曜日
selectrow_hashref
# こんなかんじでかえってくる# { id => 1, name => 'kaztr' };
my $row = $dbh->selectrow_hashref( 'SELECT id, name FROM chibapm WHERE name = ?', undef, 'kaztr',);
13年3月23日土曜日
selectall_arrayref
# こんなかんじでかえってくる# [# { id => 1, name => 'kaztr' },# { id => 2, name => 'yoku0825' },# { id => 3, name => 'hide_o_55' },# ];
my $chibapm_list = $dbh->selectall_arrayref( 'SELECT id, name FROM chibapm WHERE name IN (?, ?, ?)', +{ Slice => +{} }, 'kaztr', 'yoku0825', 'hide_o_55');
13年3月23日土曜日
selectcol_arrayref(1)
# こんなかんじでかえってくる# [ 1, 2, 3 ];
my $chibapm_id_list = $dbh->selectcol_arrayref( 'SELECT id FROM chibapm WHERE name IN (?, ?, ?)', undef, 'kaztr', 'yoku0825', 'hide_o_55');
13年3月23日土曜日
selectcol_arrayref(2)
# こんなかんじでかえってくる# [ 'kaztr', 1, 'yoku0825', 2, 'hide_o_55', 3 ];
my $chibapm_name2id_map = $dbh->selectcol_arrayref( 'SELECT name, id FROM chibapm WHERE name IN (?, ?, ?)', +{ Columns => [1, 2] }, 'kaztr', 'yoku0825', 'hide_o_55');
13年3月23日土曜日
selectcol_arrayref(3)
# こんなかんじでかえってくる# (# 'kaztr' => 1,# 'yoku0825' => 2,# 'hide_o_55' => 3,# );
my %chibapm_name2id_map = @{ $dbh->selectcol_arrayref( 'SELECT name, id FROM chibapm WHERE name IN (?, ?, ?)', +{ Columns => [1, 2] }, 'kaztr', 'yoku0825', 'hide_o_55') };
say $chibapm_name2id_map{kaztr}; # 1
13年3月23日土曜日
do
# クエリ実行するだけー# 変更された行数か、特になければ'0E0'を返す
$dbh->do( 'INSERT INTO chibapm (name) VALUES (?)', undef, 'kenjiskywalker',);
13年3月23日土曜日
どきゅめんと
% perldoc DBI
% perldoc DBD::mysql # pg,Oracle,DB2,etc...
13年3月23日土曜日
でも・・・
DBIべんり!
13年3月23日土曜日
おぼえらんない!!
メソッド名ながい!
undefだったり+{ Slice => +{} }とかイミフ
もっとかじゅあるにつかいたい!
13年3月23日土曜日
DBIx::Sunny
13年3月23日土曜日
DBIx::Sunnyとは
DBIをいいかんじに拡張してくれるライブラリ
more better DBI的なやつ
DBIの代わりにこいつを使ういめーじ
ORMとも併用可能
類似品にAmon2::DBIがある
こっちはSQL::Interpとか入ってる
13年3月23日土曜日
DBIx::Sunnyのイイトコ
DBIをいいかんじに拡張してくれてる
素のDBIの挙動を全く壊さないので導入がおてがる
基本的な使い方もDBIとおんなじ
DBIのハマりどころを簡単にしてくれる
クエリにコメントを埋め込んでくれる
クエリだけ見てどこのコードで吐かれた奴か分かる
SELECT /* hoge.pl line 3. */ id, name .....
13年3月23日土曜日
DBIx::Sunnyのイイトコ
IN句がつかいやすい
IN(?, ?, ?) とか?の数をきにしなくても
IN(?) で ArrayRef渡すといいかんじに展開する
selectall_arrayrefとかのへんなイディオムおぼえなくていい
安心のkazeburoware
13年3月23日土曜日
DBIx::Sunnyのメソッド
select_one
select_row
select_all
query (doのかわり的なやつ)
fill_arrayref (ArrayRefを展開してくれる君)
13年3月23日土曜日
select_one
# こんなかんじでかえってくる# 1
my $id = $dbh->select_one( 'SELECT id FROM chibapm WHERE name = ?', 'kaztr');
# DBI#selectrow_array でもだいたいおなじことできる!
13年3月23日土曜日
select_row
# こんなかんじでかえってくる# { id => 1, name => 'kaztr' };
my $row = $dbh->select_row( 'SELECT id, name FROM chibapm WHERE name = ?', 'kaztr',);
# DBI#selectrow_hashref とおんなじ!
13年3月23日土曜日
select_all
# こんなかんじでかえってくる# [# { id => 1, name => 'kaztr' },# { id => 2, name => 'yoku0825' },# { id => 3, name => 'hide_o_55' },# ];
my $chibapm_list = $dbh->select_all( 'SELECT id, name FROM chibapm WHERE name IN (?)', ['kaztr', 'yoku0825', 'hide_o_55']);
# DBI#selectall_arrayref でもだいたいおんなじことできる
13年3月23日土曜日
query
$dbh->query( 'INSERT INTO chibapm (name) VALUES (?)', 'kenjiskywalker',);
# DBI#do とだいたいおんなじ
13年3月23日土曜日
まだまだあるべんり君
last_insert_id
最後にinsertした行のAUTO_INCREMENTなidがとれる
connect_info
接続先情報(connectに渡す奴)が取れる
txn_scope
DBIx::TransactionManager#txn_scope
13年3月23日土曜日
DBIx::Sunnyべんり!
13年3月23日土曜日
オススメ周辺モジュール
and more...
13年3月23日土曜日
and more...
DBIx::Handler
タイムアウト時の再接続とかをサポート
DBIx::TransactionManager
ネストしたトランザクションの扱いをサポート
Teng
上の2つの機能を備えた軽量ORM
13年3月23日土曜日
まとめ!
DBIべんり!
selectcol_arrayrefを使いこなせ
DBIx::Sunnyべんり!
クエリビルダ使わないときのお供に最高
DBIのハマりどころをよしなにしてくれる
DBIx::Handlerなども併せると更に便利に!
13年3月23日土曜日
thank you for listening!!presented by @karupanerura.
13年3月23日土曜日