perl - 如何识别记录是否被找到或创建:class::dbi find_or_create

标签 perl postgresql class-dbi

我仍在学习 Perl 和 CLASS::DBI。我有一个执行大量查找的脚本,我只想插入查找找到的新项目。我为 username,created_at 创建了一个复合键,并使用以下代码将其插入到表中。

一切正常,但我想知道是否找到了记录或者它是否创建了记录。我怀疑有一种简单的方法可以做到这一点,但显然我不知道要搜索的正确术语。

请帮忙。

谢谢!

eval {
    FEED::COLLECTION->find_or_create({
        username => $user->{username},
        created_at => $status->{created_at},
        status => $status->{text}
    });
};
if ($@) {
    warn $@;
}

最佳答案

Class::DBI 不记得对象是通过什么路径被实例化的,我认为想知道这表明人们问错了问题,需要重新表述正在尝试的问题解决。

不过,如果您真的觉得需要知道,请不要使用 find_or_create。它没有做任何特别聪明的事情;这只是一个方便的例程。因此重新实现它并将对象注释为已找到:

sub my_find_or_create {
    my $class    = shift;
    my $hash     = ref $_[0] eq "HASH" ? shift: {@_};
    my ($exists) = $class->search($hash);

    if (defined $exists) {
        $exists->{_I_found_this_in_the_back} = 1; # or whatever means of noting preexistence you favor
        return $exists;
    } else {
        return $class->insert($hash);
    }
}

关于perl - 如何识别记录是否被找到或创建:class::dbi find_or_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837855/

相关文章:

Perl - 将 IPv4 地址转换为十六进制

macos - `perl -pe` 与 `sed` ,性能方面

postgresql - 如何将日期截断到一周的开始(星期日)?

postgresql select like 一列两个词

perl - 能否获取Class::DBI生成的SQL语句?

perl - 有没有办法为 Class::DBI 缓存机制?

perl - 我如何在 Class::DBI 中使用 add_to?

javascript - 属性 <position> 的值无效

perl - 无需构建即可在分发中测试脚本

sql - 优化大型子表的日期查询 : GiST or GIN?