35
DBI DBIx::* SQL::* etc... Perl RDBMS Programming id:karupanerura 13323日土曜日

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

Embed Size (px)

DESCRIPTION

Chiba.pm #2

Citation preview

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

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

Perl RDBMS Programming

id:karupanerura

13年3月23日土曜日

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

about.me

id:karupanerura

かるぱねるら

web engineer

c/js/perl/elisp

さいきんH本読んでる

MF

13年3月23日土曜日

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

あじぇんだ!!

DBI

DBIx::Sunny

and more...

まとめ

13年3月23日土曜日

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

DBI!!!!!

13年3月23日土曜日

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

DBIってなに?

PerlでRDBMSを透過的に扱うためのインターフェース

対応するDBD::*をcpanmしておくとそいつが通信とかをよしなにしてくれる

DBIつかう人はSQL文の互換性だけきにすればいい

細かい機能は一部非互換だったりするが割愛

13年3月23日土曜日

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

DBIをいれる

% cpanm DBI

% cpanm DBD::mysql # pg,Oracle,DB2,etc...

13年3月23日土曜日

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

DBIをつかう

use DBI;

my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');

# .....

$dbh->disconnect;

13年3月23日土曜日

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

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

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

べんりメソッド

selectrow_*系

selectall_*系

selectcol_*系

do

prepare(_cached)?/execute

13年3月23日土曜日

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

よくつかうやつ

selectrow_array / selectrow_hashref

selectall_arrayref

selectcol_arrayref

do

13年3月23日土曜日

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

selectrow_array

# こんなかんじでかえってくる# (1)

my ($id) = $dbh->selectrow_array( 'SELECT id FROM chibapm WHERE name = ?', undef, 'kaztr');

13年3月23日土曜日

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

selectrow_hashref

# こんなかんじでかえってくる# { id => 1, name => 'kaztr' };

my $row = $dbh->selectrow_hashref( 'SELECT id, name FROM chibapm WHERE name = ?', undef, 'kaztr',);

13年3月23日土曜日

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

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

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

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

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

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

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

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

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

do

# クエリ実行するだけー# 変更された行数か、特になければ'0E0'を返す

$dbh->do( 'INSERT INTO chibapm (name) VALUES (?)', undef, 'kenjiskywalker',);

13年3月23日土曜日

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

どきゅめんと

% perldoc DBI

% perldoc DBD::mysql # pg,Oracle,DB2,etc...

13年3月23日土曜日

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

でも・・・

DBIべんり!

13年3月23日土曜日

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

おぼえらんない!!

メソッド名ながい!

undefだったり+{ Slice => +{} }とかイミフ

もっとかじゅあるにつかいたい!

13年3月23日土曜日

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

DBIx::Sunny

13年3月23日土曜日

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

DBIx::Sunnyとは

DBIをいいかんじに拡張してくれるライブラリ

more better DBI的なやつ

DBIの代わりにこいつを使ういめーじ

ORMとも併用可能

類似品にAmon2::DBIがある

こっちはSQL::Interpとか入ってる

13年3月23日土曜日

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

DBIx::Sunnyのイイトコ

DBIをいいかんじに拡張してくれてる

素のDBIの挙動を全く壊さないので導入がおてがる

基本的な使い方もDBIとおんなじ

DBIのハマりどころを簡単にしてくれる

クエリにコメントを埋め込んでくれる

クエリだけ見てどこのコードで吐かれた奴か分かる

SELECT /* hoge.pl line 3. */ id, name .....

13年3月23日土曜日

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

DBIx::Sunnyのイイトコ

IN句がつかいやすい

IN(?, ?, ?) とか?の数をきにしなくても

IN(?) で ArrayRef渡すといいかんじに展開する

selectall_arrayrefとかのへんなイディオムおぼえなくていい

安心のkazeburoware

13年3月23日土曜日

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

DBIx::Sunnyのメソッド

select_one

select_row

select_all

query (doのかわり的なやつ)

fill_arrayref (ArrayRefを展開してくれる君)

13年3月23日土曜日

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

select_one

# こんなかんじでかえってくる# 1

my $id = $dbh->select_one( 'SELECT id FROM chibapm WHERE name = ?', 'kaztr');

# DBI#selectrow_array でもだいたいおなじことできる!

13年3月23日土曜日

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

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

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

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

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

query

$dbh->query( 'INSERT INTO chibapm (name) VALUES (?)', 'kenjiskywalker',);

# DBI#do とだいたいおんなじ

13年3月23日土曜日

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

まだまだあるべんり君

last_insert_id

最後にinsertした行のAUTO_INCREMENTなidがとれる

connect_info

接続先情報(connectに渡す奴)が取れる

txn_scope

DBIx::TransactionManager#txn_scope

13年3月23日土曜日

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

DBIx::Sunnyべんり!

13年3月23日土曜日

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

オススメ周辺モジュール

and more...

13年3月23日土曜日

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

and more...

DBIx::Handler

タイムアウト時の再接続とかをサポート

DBIx::TransactionManager

ネストしたトランザクションの扱いをサポート

Teng

上の2つの機能を備えた軽量ORM

13年3月23日土曜日

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

まとめ!

DBIべんり!

selectcol_arrayrefを使いこなせ

DBIx::Sunnyべんり!

クエリビルダ使わないときのお供に最高

DBIのハマりどころをよしなにしてくれる

DBIx::Handlerなども併せると更に便利に!

13年3月23日土曜日

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

thank you for listening!!presented by @karupanerura.

13年3月23日土曜日