YanoRyuichi.com/
Wiki
Blog
GitHub
Sandbox
開始行:
* 全体の流れ [#k203f830]
** データベースの作成 [#vad6e51f]
*** スキーマ [#gc8e50ce]
ここでは以下のようなスキーマのDBをSQLiteで作る事にする。
-テーブル player
-- player_id int (PK)
-- player_name text
-- team_id int (FK)
-テーブル team
-- team_id int (PK)
-- team_name text
*** シェルから作成実行 [#jf1c9d9e]
以下のようにシェルからコマンドを実行し、DBを作成する。
cat > test.sql
create table player ( player_id int primary key, player_...
create table team ( team_id int primary key, team_name t...
insert into player values ( 1 , 'a', 1);
insert into player values ( 2 , 'b', 1);
insert into player values ( 3 , 'c', 2);
insert into player values ( 4 , 'd', 2);
insert into player values ( 5 , 'e', 1);
insert into team values ( 1, 'x');
insert into team values ( 2, 'y');
sqlite3 test.db < test.sql
** スキーマクラス・テーブルクラスの作成 [#b658349a]
*** シェルから作成実行 [#xf4181d2]
DBIx::Class::Schema::Loaderのmake_shema_atを使って、スキ...
perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_t...
-e 'make_schema_at "MyDB::Schema", {relationships => 1, ...
*** 作成されたファイルの構成 [#va03ff47]
lib
`-- MyDB
|-- Schema
| |-- Player.pm テーブルクラス DBIx::Class
| `-- Team.pm テーブルクラス DBIx::Class
`-- Schema.pm スキーマクラス DBIx::Class::Schema
*** Schema.pm [#a29ae65b]
package MyDB::Schema;
use base 'DBIx::Class::Schema';
__PACKAGE__->load_classes;
*** Player.pm [#e4098674]
package MyDB::Schema::Player;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("player");
__PACKAGE__->add_columns(
"player_id",
{ data_type => "int", default_value => undef, is_nulla...
"player_name",
{
data_type => "text",
default_value => undef,
is_nullable => 1,
size => undef,
},
"team_id",
{ data_type => "", default_value => undef, is_nullable...
);
__PACKAGE__->set_primary_key("player_id");
テーブルジョイン出来るように以下の行をPlayer.pmに追加する...
__PACKAGE__->belongs_to('team', 'MyDB::Schema::Team', 't...
*** Team.pm [#j8f59a78]
package MyDB::Schema::Team;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("team");
__PACKAGE__->add_columns(
"team_id",
{ data_type => "int", default_value => undef, is_nulla...
"team_name",
{
data_type => "text",
default_value => undef,
is_nullable => 1,
size => undef,
},
);
__PACKAGE__->set_primary_key("team_id");
*** 注意 [#p70892a0]
スキーマクラスで、load_classes()ではなく、load_namespaces...
詳しくは、http://search.cpan.org/perldoc?DBIx::Class::Sch...
** DB操作スクリプト例 [#r7c9ecc4]
use lib './lib';
use MyDB::Schema;
my $schema = MyDB::Schema->connect('dbi:SQLite:dbname=te...
my $rs = $schema->resultset('Player');
my @rows = $rs->all;
foreach my $r (@rows) {
print join(':', ($r->player_id,$r->player_name,$r->te...
}
終了行:
* 全体の流れ [#k203f830]
** データベースの作成 [#vad6e51f]
*** スキーマ [#gc8e50ce]
ここでは以下のようなスキーマのDBをSQLiteで作る事にする。
-テーブル player
-- player_id int (PK)
-- player_name text
-- team_id int (FK)
-テーブル team
-- team_id int (PK)
-- team_name text
*** シェルから作成実行 [#jf1c9d9e]
以下のようにシェルからコマンドを実行し、DBを作成する。
cat > test.sql
create table player ( player_id int primary key, player_...
create table team ( team_id int primary key, team_name t...
insert into player values ( 1 , 'a', 1);
insert into player values ( 2 , 'b', 1);
insert into player values ( 3 , 'c', 2);
insert into player values ( 4 , 'd', 2);
insert into player values ( 5 , 'e', 1);
insert into team values ( 1, 'x');
insert into team values ( 2, 'y');
sqlite3 test.db < test.sql
** スキーマクラス・テーブルクラスの作成 [#b658349a]
*** シェルから作成実行 [#xf4181d2]
DBIx::Class::Schema::Loaderのmake_shema_atを使って、スキ...
perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_t...
-e 'make_schema_at "MyDB::Schema", {relationships => 1, ...
*** 作成されたファイルの構成 [#va03ff47]
lib
`-- MyDB
|-- Schema
| |-- Player.pm テーブルクラス DBIx::Class
| `-- Team.pm テーブルクラス DBIx::Class
`-- Schema.pm スキーマクラス DBIx::Class::Schema
*** Schema.pm [#a29ae65b]
package MyDB::Schema;
use base 'DBIx::Class::Schema';
__PACKAGE__->load_classes;
*** Player.pm [#e4098674]
package MyDB::Schema::Player;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("player");
__PACKAGE__->add_columns(
"player_id",
{ data_type => "int", default_value => undef, is_nulla...
"player_name",
{
data_type => "text",
default_value => undef,
is_nullable => 1,
size => undef,
},
"team_id",
{ data_type => "", default_value => undef, is_nullable...
);
__PACKAGE__->set_primary_key("player_id");
テーブルジョイン出来るように以下の行をPlayer.pmに追加する...
__PACKAGE__->belongs_to('team', 'MyDB::Schema::Team', 't...
*** Team.pm [#j8f59a78]
package MyDB::Schema::Team;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("team");
__PACKAGE__->add_columns(
"team_id",
{ data_type => "int", default_value => undef, is_nulla...
"team_name",
{
data_type => "text",
default_value => undef,
is_nullable => 1,
size => undef,
},
);
__PACKAGE__->set_primary_key("team_id");
*** 注意 [#p70892a0]
スキーマクラスで、load_classes()ではなく、load_namespaces...
詳しくは、http://search.cpan.org/perldoc?DBIx::Class::Sch...
** DB操作スクリプト例 [#r7c9ecc4]
use lib './lib';
use MyDB::Schema;
my $schema = MyDB::Schema->connect('dbi:SQLite:dbname=te...
my $rs = $schema->resultset('Player');
my @rows = $rs->all;
foreach my $r (@rows) {
print join(':', ($r->player_id,$r->player_name,$r->te...
}
ページ名: