【问题标题】:How to return updated records using Sequel Gem on a bulk update如何在批量更新中使用 Sequel Gem 返回更新的记录
【发布时间】:2015-10-20 21:08:11
【问题描述】:

我正在使用Sequel gem 批量更新 MySql 中的用户。

users = Users.filter(:id => ids).all
raise if users.nil?

updated_users = Users.filter(:id => addon_ids).update({deleted: 1, moderator_id: moderator_id})
p updated_users
# => 3

根据Sequel documentation

“更新 [和删除] 应该返回受影响的行数......”

所以上述行为是意料之中的,但我的问题是,如何让 Sequel gem 返回更新的记录而不是受影响的记录数?

我期待这种行为:

users = Users.filter(:id => ids).all
raise if users.nil?

updated_users = Users.filter(:id => addon_ids).update({deleted: 1, moderator_id: moderator_id})
p updated_users
# => [#<Users @values={:id=>1, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>2, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>3, :moderator_id=>"testuser", :deleted=>1}>]

【问题讨论】:

    标签: ruby sequel sequel-gem


    【解决方案1】:

    嗯,这就是 DB 返回的内容,因此 Sequel 会按照开发人员的预期去做。而是这样做:

    users = Users.where(:id => ids)
    raise if users.empty?
    
    updated_users = Users.where(:id => addon_ids)
    updated_users.update({deleted: 1, moderator_id: moderator_id})
    p updated_users
    # => [#<Users @values={:id=>1, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>2, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>3, :moderator_id=>"testuser", :deleted=>1}>]
    

    这样您就不会将受影响的行数分配给updated_users

    【讨论】:

      【解决方案2】:

      对于可能仍在寻找此内容的人,根​​据您的数据库引擎,您可以使用returning

      updated_users = Users.returning.filter(:id => addon_ids).update({deleted: 1, moderator_id: moderator_id})
      p updated_users
      # => [#<Users @values={:id=>1, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>2, :moderator_id=>"testuser", :deleted=>1}>, #<Users @values={:id=>3, :moderator_id=>"testuser", :deleted=>1}>]
      

      文档:http://www.rubydoc.info/github/jeremyevans/sequel/Sequel%2FDataset%3Areturning

      【讨论】:

        猜你喜欢
        • 2017-11-13
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 2018-09-14
        • 2018-05-28
        • 1970-01-01
        相关资源
        最近更新 更多