Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)

5,229 views

Published on

Chiba.pm #2

Published in: Technology

Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)

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

×