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;

 

标签