gpt4 book ai didi

ruby - 如何更新或插入 Sequel 数据集?

转载 作者:数据小太阳 更新时间:2023-10-29 06:40:19 31 4
gpt4 key购买 nike

我刚开始在一个非常小的 Sinatra 应用程序中使用 Sequel。因为我只有一个数据库表,所以我不需要使用模型。

我想更新一条记录(如果它存在)或者插入一条新记录(如果它不存在)。我提出了以下解决方案:

  rec = $nums.where(:number => n, :type => t)
if $nums.select(1).where(rec.exists)
rec.update(:counter => :counter + 1)
else
$nums.insert(:number => n, :counter => 1, :type => t)
end

其中 $numsDB[:numbers] 数据集。

我相信这种方式不是“更新或插入”行为的最优雅实现方式。

应该怎么做?

最佳答案

您可能不应该在更新/插入之前进行检查;因为:

  1. 这是一个额外的数据库调用。
  2. 这可能会引入竞争条件。

您应该做的是测试更新的返回值:

rec = $nums.where(:number => n, :type => t)
if 1 != rec.update(:counter => :counter + 1)
$nums.insert(:number => n, :counter => 1, :type => t)
end

关于ruby - 如何更新或插入 Sequel 数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9769024/

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