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

4,547
-1

Published on

Chiba.pm #2

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total Views
4,547
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
9
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

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日土曜日

×