gpt4 book ai didi

perl - 如何在 Class::DBI 中进行更新而不先选择记录?

转载 作者:行者123 更新时间:2023-12-04 14:08:00 24 4
gpt4 key购买 nike

要使用 Class::DBI 进行插入,您只需执行以下操作:

my $object = Object::DB->insert({ a => 1, b => 2, c => 3, ...});

但是没有更新这样的东西。我能想到的最好方法是先选择记录然后更新它:
my $object = Object::DB->retrieve($id);
my $object->set( a => 1, b => 2, c => 3, ...};
$object->update;

这效率不高,因为我必须先执行 SELECT,然后执行 UPDATE 而不是仅执行一次 UPDATE。

有没有更好的方法用 Class::DBI 做到这一点?我不想做42个$object->a(1)、$object->b(2)等,$object->update;

最佳答案

据我所知, Class::DBI 没有一个很好的方法来做到这一点,正如你所指出的,它的 update()方法旨在在先前已从数据库加载的对象上调用。

但是,您可以说服 Class::DBI 做您想做的事情,如下所示:

# Make new "empty" object
my $o = My::CDBI::Object->new;

# Set the primary key column and discard the change
$o->set(your_pk_column => 123);
$o->discard_changes;

# Set your other columns
$o->set(a => 'foo', b => 'bar');

# Do the update
$o->update;

如果此功能对您很重要并且您还没有深入到您的项目中,那么您肯定会使用较新的 Perl ORM 之一(例如 Rose::DB::Object)获得更好的运气。或 DBIx::Class . DBIx::Class 甚至包括 a Class::DBI compatibility layer .

关于perl - 如何在 Class::DBI 中进行更新而不先选择记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/510139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com