Mojolicious数据库操作(十一)

一、quote

该方法在SQL语句中引用字符串的字面值:

my $escaped = $db->quote($str);

二、quote_id

在SQL语句中直接引用identify,也就是身份标识符,例如表名

my $escaped = $db->quote_id($id);

三、select

该方法是查询一个抽象方法:

my $results = $db->select($source, $fields, $where, $order);
#我们下面举几个例子,请各位自己体会各个参数的意义:
# "select foo as bar from some_table"
$db->select('some_table', [[foo => 'bar']]);

# "select foo, bar as baz, yada from some_table"
$db->select('some_table', ['foo', [bar => 'baz'], 'yada']);

# "select extract(epoch from foo) as foo, bar from some_table"
$db->select('some_table', [\'extract(epoch from foo) as foo', 'bar']);

# "select 'test' as foo, bar from some_table"
$db->select('some_table', [\['? as foo', 'test'], 'bar']);

作为一个堵塞方法,和其他抽象方法一样也有非堵塞的方式:

$db->select(some_table => ['foo'] => sub {
  my ($db, $err, $results) = @_;
  ...
});
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;

四、select_p

和其他方法一样,这是select的异步方法:

my $promise = $db->select_p($source, $fields, $where, $order);
$db->select_p(some_table => ['foo'] => {bar => 'yada'})->then(sub {
  my $results = shift;
  ...
})->catch(sub {
  my $err = shift;
  ...
})->wait;

五、update

该方法是更新数据的一个抽象方法:

my $results = $db->update($table, \%fieldvals, \%where);

#fieldvals是散列键值对,键是字段名,值是要插入的值
#where是散列,对应SQL语句中的where

同样该方法也可以做非堵塞查询:

$db->update(some_table => {foo => 'baz'} => {foo => 'bar'} => sub {
  my ($db, $err, $results) = @_;
  ...
});
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;

六、update_p

update方法对应的异步方法:

my $promise = $db->update_p($table, \%fieldvals, \%where, \%options);

$db->update_p(some_table => {foo => 'baz'} => {foo => 'bar'})->then(sub {
  my $results = shift;
  ...
})->catch(sub {
  my $err = shift;
  ...
})->wait;

七、table

该方法返回数据库中所有表名称一个数组引用:

my $tables = $db->tables;

标签