保存(可能)重复 Sequel 个模型实例
Save (possibly) duplicate Sequel Model instance
在 Sequel 中,如果您有一个名为 MyModel 的模型 class,您可以这样做:
#make MyModel instance
row = MyModel.new(column1, column2)
#save it to the database Sequel is connected to
row.save
但是,如果您保存重复的主键,"row.save" 将会失败。
我正在寻找一种方法,如果主键不重复且不保存任何内容,则将值保存到数据库,否则不会失败。
我已经查看了 instance methods for Sequel Model,但我没有找到我要找的东西。我有办法做到这一点吗?
我以前没有用过 Sequel,但你总是可以用 begin/rescue 块包装保存调用,然后不做任何事情就吞掉错误(你几乎总是想做一些事情).
begin
row = MyModel.new(col1, col2)
row.save
rescue Sequel::DatabaseError => e
# handle error here
end
注意:您可能需要上述 DatabaseError
以外的内容。
Sequel 区分新创建的模型对象和从数据库中获取的模型对象——即使它们包含相同的数据。比如我们得到这样一条记录,存入数据库就成功了:
row = MyModel.where(:column1 => column1, :column2 => column2)
row.save
#save succeeds
如果我们创建一个具有相同值的新对象并将其保存到数据库中,保存将失败:
row = MyModel.new(column1, column2)
row.save
#save returns duplicate primary key error
要更新数据库中的值而不出现重复的主键错误,请获取具有相关主键的记录(如果存在),修改它,然后保存它。
在 Sequel 中,如果您有一个名为 MyModel 的模型 class,您可以这样做:
#make MyModel instance
row = MyModel.new(column1, column2)
#save it to the database Sequel is connected to
row.save
但是,如果您保存重复的主键,"row.save" 将会失败。
我正在寻找一种方法,如果主键不重复且不保存任何内容,则将值保存到数据库,否则不会失败。
我已经查看了 instance methods for Sequel Model,但我没有找到我要找的东西。我有办法做到这一点吗?
我以前没有用过 Sequel,但你总是可以用 begin/rescue 块包装保存调用,然后不做任何事情就吞掉错误(你几乎总是想做一些事情).
begin
row = MyModel.new(col1, col2)
row.save
rescue Sequel::DatabaseError => e
# handle error here
end
注意:您可能需要上述 DatabaseError
以外的内容。
Sequel 区分新创建的模型对象和从数据库中获取的模型对象——即使它们包含相同的数据。比如我们得到这样一条记录,存入数据库就成功了:
row = MyModel.where(:column1 => column1, :column2 => column2)
row.save
#save succeeds
如果我们创建一个具有相同值的新对象并将其保存到数据库中,保存将失败:
row = MyModel.new(column1, column2)
row.save
#save returns duplicate primary key error
要更新数据库中的值而不出现重复的主键错误,请获取具有相关主键的记录(如果存在),修改它,然后保存它。