【发布时间】:2013-03-30 19:18:30
【问题描述】:
我想在 SQLite 上向 table1 添加新记录
use SQL::Abstract;
my %data = (
id => \'max(id)', # it is doesn't work so which variant is right?
record => 'Something'
);
my $sql = SQL::Abstract->new;
my ($stmt, @bind) = $sql->insert('table1', \%data);
...
my $sth = $dbh->prepare($stmt);
如果我在 Catalyst 应用程序中使用 DBIx::Class,我会这样写:
id => $c->model('Model')->get_column('id')->max()
它会正常工作。 那么我怎样才能达到相同的目标,但只使用 DBIx::Class 中使用的 SQL::Abstract。 有人可以修复它吗?谢谢。
【问题讨论】:
-
这似乎效率很低。为什么不让列自动递增或使用计数器表?
-
如果您有超过 1 个进程进行插入,它也会受到竞争条件的影响。
-
我只是想了解如何使用这个模块进行复杂的查询。
-
回想一下——你认为 SQL 应该是什么样的?您可以一步完成还是必须两个(找到最大 id 然后插入新记录)?您如何找到最大 id(是函数调用还是单独的 SQL)?它可能不是这个 Perl 模块的最佳用例。
-
警告:我不使用这个 perl 模块,但也许你正在寻找调用 SQL 函数的语法:search.cpan.org/~frew/SQL-Abstract-1.73/lib/SQL/…
标签: sql perl sqlite perl-module dbi