Mojolicious数据库操作(九)
之前八篇博文,我们已经将Mojo::mysql模块的主体讲了一遍。现在,我们继续深入讲解其中的子模块Mojo::mysql::Database。
在前面我们提到过,$mysql->db对象,便是Mojo::mysql::Database模块的对象。因此,将此模块主要还是将db对象的各种方法。
一、blacklog
显示非堵塞查询的数量:
my $num = $db->backlog;
二、begin
begin方法是mojo::mysql模块开启事务的方法,该方法会返回一个Mojo::mysql::Transaction对象:
eval { my $tx = $db->begin; $db->query('insert into names values (?)', 'Baerbel'); $db->query('insert into names values (?)', 'Wolfgang'); $tx->commit; }; say $@ if $@;
三、delete
delete是抽象方法,可以在自动生成一个DELETE的SQL语句。
my $results = $db->delete($table, \%where); #where是一个散列,用来删除特定的某行数据,代表着SQL语句where判断条件部分。
通过后面跟一个callback回调方法,可以实现非堵塞的查询:
$db->delete(some_table => sub { my ($db, $err, $results) = @_; ... }); Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
四、delete_p
my $promise = $db->delete_p($table, \%where, \%options); #where散列,代表SQL语句where判断条件部分,option散列代表一些可用的参数。 #该方法类似于上面的delete,但是它是一个非堵塞的操作,他返回一个<Mojo::Promise>对象而不是上面的callback回调函数: $db->delete_p('some_table')->then(sub { #some_table代表着表名字 my $results = shift; ... })->catch(sub { my $err = shift; ... })->wait;
五、disconnect
该方法是断开数据库连接的操作:
$db->disconnect;
六、insert
该方法也是一个抽象方法,用来向数据表中插入数据:
my $results = $db->insert($table, \@values || \%fieldvals, \%options); #table表名字,value和fieldvals都是将值插入到数据库中,一个是数组、一个是键值对散列。
该方法也是可以非堵塞操作的:
$db->insert(some_table => {foo => 'bar'} => sub { my ($db, $err, $results) = @_; ... }); Mojo::IOLoop->start unless Mojo::IOLoop->is_running;