SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
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日土曜日

Weitere ähnliche Inhalte

Andere mochten auch

正月発火村に参加して変な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 morecharsbar
 
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-changingcharsbar
 
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 LTmaka2donzoko
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuningrisou
 

Andere mochten auch (20)

Teng tips
Teng tipsTeng tips
Teng tips
 
正月発火村に参加して変なJobQueueサーバー作った話
正月発火村に参加して変なJobQueueサーバー作った話正月発火村に参加して変なJobQueueサーバー作った話
正月発火村に参加して変なJobQueueサーバー作った話
 
20160320 サンモクを通して学んだ話
20160320 サンモクを通して学んだ話20160320 サンモクを通して学んだ話
20160320 サンモクを通して学んだ話
 
高砂 一人でロ○□×風味
高砂 一人でロ○□×風味高砂 一人でロ○□×風味
高砂 一人でロ○□×風味
 
Chibapm1
Chibapm1Chibapm1
Chibapm1
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
 
JSON, JSON::PP, and more
JSON, JSON::PP, and moreJSON, JSON::PP, and more
JSON, JSON::PP, and more
 
Devel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグするDevel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグする
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
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)
 
Json(::PP) is a-changing
Json(::PP) is a-changingJson(::PP) is a-changing
Json(::PP) is a-changing
 
Gotanda.pmの紹介
Gotanda.pmの紹介Gotanda.pmの紹介
Gotanda.pmの紹介
 
KOWAZA for mackerel
KOWAZA for mackerelKOWAZA for mackerel
KOWAZA for mackerel
 
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
 
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
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 

Mehr von karupanerura

コンテキストと仲良く
コンテキストと仲良くコンテキストと仲良く
コンテキストと仲良くkarupanerura
 
The plan of Aniki 2.0
The plan of Aniki 2.0The plan of Aniki 2.0
The plan of Aniki 2.0karupanerura
 
The Crystal language *recently* update
The Crystal language *recently* updateThe Crystal language *recently* update
The Crystal language *recently* updatekarupanerura
 
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freakskarupanerura
 
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
 
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
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programmingkarupanerura
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockkarupanerura
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LTkarupanerura
 

Mehr von karupanerura (20)

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

Kürzlich hochgeladen

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Kürzlich hochgeladen (8)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

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