当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在不首先选择记录的情况下在Class::DBI中进行更新?》经验,为你挑选了1个好方法。

要使用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;



1> John Siracus..:

据我所知,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;

如果这个功能对你很重要而且你的项目已经不是很远了,你肯定会有更好的运气,比如Rose :: DB :: Object或DBIx :: Class等新的Perl ORM .DBIx :: Class甚至包括Class :: DBI兼容层.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有