
DBIx::Skinny - simple DBI wrapper/ORMapper

package Your::Model;
use DBIx::Skinny setup => {
dsn => 'dbi:SQLite:',
username => '',
password => '',
};
1;
package Your::Model::Schema;
use DBIx::Skinny::Schema;
install_table user => schema {
pk 'id';
columns qw/
id
name
/;
};
1;
# in your script:
use Your::Model;
# insert
my $row = Your::Model->insert('user',
{
id => 1,
}
);
$row->update({name => 'nekokak'});
$row = Your::Model->search_by_sql(q{SELECT id, name FROM user WHERE id = ?}, [ 1 ]);
$row->delete('user')

DBIx::Skinny is simple DBI wrapper and simple O/R Mapper.

create your skinny instance.
It is possible to use it even by the class method.
my $db = Your::Model->new($connection_info);
$connection_info is optional argment.
When $connection_info is specified, new method connect new DB connection from $connection_info.
When $connection_info is not specified, it becomes use already setup connection or it doesn't do at all.
example:
my $db = Your::Model->new;
or
# connect new database connection.
my $db = Your::Model->new(+{
dsn => $dsn,
username => $username,
password => $password,
connect_options => $connect_options,
});
insert new record and get inserted row object.
my $row = Your::Model->insert($table, \%row_data);
return object is a DBIx::Skinny::Row's object.
example:
my $row = Your::Model->insert('user',{
id => 1,
name => 'nekokak',
});
or
my $db = Your::Model->new;
my $row = $db->insert('user',{
id => 1,
name => 'nekokak',
});
insert many record.
Your::Model->bulk_insert($table, \@rows);
example:
Your::Model->bulk_insert('user',[
{
id => 1,
name => 'nekokak',
},
{
id => 2,
name => 'yappo',
},
{
id => 3,
name => 'walf443',
},
]);
insert method alias.
update record. return update row count.
my $cnt = Your::Model->update($table, \%update_column);
example:
my $update_row_count = Your::Model->update('user',{
name => 'nomaneko',
},{ id => 1 });
update record by specific sql. return update row count.
example: my $update_row_count = Your::Model->update_by_sql( q{UPDATE user SET name = ?}, 'nomaneko' );
delete record. return delete row count.
my $cnt = Your::Model->delete($table, \%delete_where_condition);
example: my $delete_row_count = Your::Model->delete('user',{ id => 1, });
delete record by specific sql. return delete row count.
example:
my $delete_row_count = Your::Model->delete_by_sql(
q{DELETE FROM user WHERE id = ?},
[1]
});
create record if not exsists record.
my $row = Your::Model->find_or_create($table, \%row);
return object is a DBIx::Skinny::Row's object.
example:
my $row = Your::Model->find_or_create('usr',{
id => 1,
name => 'nekokak',
});
find_or_create method alias.
simple search method.
get iterator:
my $itr = Your::Model->search('user',{id => 1},{order_by => 'id'});
get rows:
my @rows = Your::Model->search('user',{id => 1},{order_by => 'id'});
get one record
my $row = Your::Model->single('user',{id =>1});
result set case:
my $rs = Your::Model->resultset(
{
select => [qw/id name/],
from => [qw/user/],
}
);
$rs->add_where('name' => {op => 'like', value => "%neko%"});
$rs->limit(10);
$rs->offset(10);
$rs->order({ column => 'id', desc => 'DESC' });
my $itr = $rs->retrieve;
get simple count
my $cnt = Your::Model->count('user', 'id');
execute named query
my $itr = Your::Model->search_named(q{SELECT * FROM user WHERE id = :id}, {id => 1});
execute your SQL
my $itr = Your::Model->search_by_sql(q{
SELECT
id, name
FROM
user
WHERE
id = ?
},[ 1 ]);
get transaction scope object.
do {
my $txn = Your::Model->txn_scope;
# some process
$txn->commit;
}
my $itr = Your::Model->data2itr('user',[
{
id => 1,
name => 'nekokak',
},
{
id => 2,
name => 'yappo',
},
{
id => 3,
name => 'walf43',
},
]);
my $row = $itr->first;
$row->insert; # inser data.
my $row = Your::Model->find_or_new('user',{name => 'nekokak'});
execute your query.
get database handle.
connect database handle.
re connect database handle.

No bugs have been reported.

Atsushi Kobayashi <nekokak __at__ gmail.com>

walf443 : Keiji Yoshimi
TBONE : Terrence Brannon
nekoya : Ryo Miyake
oinume: Kazuhiro Oinuma
fujiwara: Shunichiro Fujiwara
pjam: Tomoyuki Misonou

git clone git://github.com/nekokak/p5-dbix-skinny.git

Copyright (c) 2009, Atsushi Kobayashi <nekokak __at__ gmail.com>. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.