微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl – 如何在不首先选择记录的情况下在Class :: DBI中进行更新?

要使用Class :: DBI进行插入,您只需执行以下操作:
my $object = Object::DB->insert({ a => 1,b => 2,c => 3,...});

但是没有更新的东西.我能想到的最好的是先选择记录然后更新它:

my $object = Object::DB->retrieve($id);
my $object->set( a => 1,...};
$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::ObjectDBIx::Class.DBIx :: Class甚至包括a Class::DBI compatibility layer.

原文地址:https://www.jb51.cc/Perl/171335.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐