SlideShare a Scribd company logo
Perl RDBMS
                       Programming
                           id:karupanerura


              DBI DBIx::* SQL::* etc...




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');

       # MySQL
       my $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日土曜日

More Related Content

Viewers also liked (20)

Teng tips
Teng tipsTeng tips
Teng tips
karupanerura
 
正月発火村に参加して変なJobQueueサーバー作った話
正月発火村に参加して変なJobQueueサーバー作った話正月発火村に参加して変なJobQueueサーバー作った話
正月発火村に参加して変なJobQueueサーバー作った話
karupanerura
 
20160320 サンモクを通して学んだ話
20160320 サンモクを通して学んだ話20160320 サンモクを通して学んだ話
20160320 サンモクを通して学んだ話
Masaaki Takasago
 
高砂 一人でロ○□×風味
高砂 一人でロ○□×風味高砂 一人でロ○□×風味
高砂 一人でロ○□×風味
Masaaki Takasago
 
Chibapm1
Chibapm1Chibapm1
Chibapm1
Yoichi Hirota
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
Akabane Hiroyuki
 
JSON, JSON::PP, and more
JSON, JSON::PP, and moreJSON, JSON::PP, and more
JSON, JSON::PP, and more
charsbar
 
Devel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグするDevel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグする
Masaaki Takasago
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
karupanerura
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
The Next PowerCMS
The Next PowerCMSThe Next PowerCMS
The Next PowerCMS
純生 野田
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
charsbar
 
Json(::PP) is a-changing
Json(::PP) is a-changingJson(::PP) is a-changing
Json(::PP) is a-changing
charsbar
 
Gotanda.pmの紹介
Gotanda.pmの紹介Gotanda.pmの紹介
Gotanda.pmの紹介
karupanerura
 
KOWAZA for mackerel
KOWAZA for mackerelKOWAZA for mackerel
KOWAZA for mackerel
karupanerura
 
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
karupanerura
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
karupanerura
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
純生 野田
 
YAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTYAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LT
maka2donzoko
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
risou
 
正月発火村に参加して変なJobQueueサーバー作った話
正月発火村に参加して変なJobQueueサーバー作った話正月発火村に参加して変なJobQueueサーバー作った話
正月発火村に参加して変なJobQueueサーバー作った話
karupanerura
 
20160320 サンモクを通して学んだ話
20160320 サンモクを通して学んだ話20160320 サンモクを通して学んだ話
20160320 サンモクを通して学んだ話
Masaaki Takasago
 
高砂 一人でロ○□×風味
高砂 一人でロ○□×風味高砂 一人でロ○□×風味
高砂 一人でロ○□×風味
Masaaki Takasago
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
Akabane Hiroyuki
 
JSON, JSON::PP, and more
JSON, JSON::PP, and moreJSON, JSON::PP, and more
JSON, JSON::PP, and more
charsbar
 
Devel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグするDevel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグする
Masaaki Takasago
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
charsbar
 
Json(::PP) is a-changing
Json(::PP) is a-changingJson(::PP) is a-changing
Json(::PP) is a-changing
charsbar
 
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
karupanerura
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
karupanerura
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
純生 野田
 
YAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTYAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LT
maka2donzoko
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
risou
 

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

Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
azuma satoshi
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
Takuya Tsuchida
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
Hideaki Ohno
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
龍一 田中
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Toru Yamaguchi
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
Akabane Hiroyuki
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
 
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
karupanerura
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testing
Yuji Shimada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
Toshi Harada
 
RDBを中核としたXMLDBの開発
RDBを中核としたXMLDBの開発RDBを中核としたXMLDBの開発
RDBを中核としたXMLDBの開発
Hiroyuki Inoue
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
 
CPANモジュールをPHPに移植してみた話
CPANモジュールをPHPに移植してみた話CPANモジュールをPHPに移植してみた話
CPANモジュールをPHPに移植してみた話
memememomo
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
cryks
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
azuma satoshi
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
Takuya Tsuchida
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
Hideaki Ohno
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
龍一 田中
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Toru Yamaguchi
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
Akabane Hiroyuki
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
 
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
karupanerura
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testing
Yuji Shimada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
Toshi Harada
 
RDBを中核としたXMLDBの開発
RDBを中核としたXMLDBの開発RDBを中核としたXMLDBの開発
RDBを中核としたXMLDBの開発
Hiroyuki Inoue
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
Satoshi Suzuki
 
CPANモジュールをPHPに移植してみた話
CPANモジュールをPHPに移植してみた話CPANモジュールをPHPに移植してみた話
CPANモジュールをPHPに移植してみた話
memememomo
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
cryks
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
Ad

More from karupanerura (20)

Perl5 VS JSON
Perl5 VS JSONPerl5 VS JSON
Perl5 VS JSON
karupanerura
 
コンテキストと仲良く
コンテキストと仲良くコンテキストと仲良く
コンテキストと仲良く
karupanerura
 
The plan of Aniki 2.0
The plan of Aniki 2.0The plan of Aniki 2.0
The plan of Aniki 2.0
karupanerura
 
Aniki::Internal
Aniki::InternalAniki::Internal
Aniki::Internal
karupanerura
 
The Crystal language *recently* update
The Crystal language *recently* updateThe Crystal language *recently* update
The Crystal language *recently* update
karupanerura
 
DateTimeX::Moment
DateTimeX::MomentDateTimeX::Moment
DateTimeX::Moment
karupanerura
 
Aniki has come
Aniki has comeAniki has come
Aniki has come
karupanerura
 
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
karupanerura
 
router-simple.cr
router-simple.crrouter-simple.cr
router-simple.cr
karupanerura
 
Why we use mruby with Perl5?
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?
karupanerura
 
はかたの塩
はかたの塩はかたの塩
はかたの塩
karupanerura
 
Perlにおけるclass実装パターン
Perlにおけるclass実装パターンPerlにおけるclass実装パターン
Perlにおけるclass実装パターン
karupanerura
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
karupanerura
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programming
karupanerura
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
karupanerura
 
engineer-life
engineer-lifeengineer-life
engineer-life
karupanerura
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
karupanerura
 
コンテキストと仲良く
コンテキストと仲良くコンテキストと仲良く
コンテキストと仲良く
karupanerura
 
The plan of Aniki 2.0
The plan of Aniki 2.0The plan of Aniki 2.0
The plan of Aniki 2.0
karupanerura
 
The Crystal language *recently* update
The Crystal language *recently* updateThe Crystal language *recently* update
The Crystal language *recently* update
karupanerura
 
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
karupanerura
 
Why we use mruby with Perl5?
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?
karupanerura
 
Perlにおけるclass実装パターン
Perlにおけるclass実装パターンPerlにおけるclass実装パターン
Perlにおけるclass実装パターン
karupanerura
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
karupanerura
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programming
karupanerura
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
karupanerura
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
karupanerura
 
Ad

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

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