sql – 如何在Rails中批量运行更新?
发布时间:2020-12-12 16:44:33 所属栏目:MsSql教程 来源:网络整理
导读:我需要大量更新数千条记录,我想批量处理更新.首先,我试过: Foo.where(bar: 'bar').find_in_batches.update_all(bar: 'baz') …我希望会生成SQL,如: "UPDATE foo SET bar = 'baz' where bar='bar' AND id (whatever id is passed in by find_in_batches)" 这
我需要大量更新数千条记录,我想批量处理更新.首先,我试过:
Foo.where(bar: 'bar').find_in_batches.update_all(bar: 'baz') …我希望会生成SQL,如: "UPDATE foo SET bar = 'baz' where bar='bar' AND id > (whatever id is passed in by find_in_batches)" 这不起作用,因为find_in_batches返回一个数组,而update_all需要一个ActiveRecord关系. 这是我下一步尝试的 Foo.where(bar: 'bar').select('id').find_in_batches do |foos| ids = foos.map(&:id) Foo.where(id: ids).update_all(bar: 'baz') end 这是有效的,但它显然运行一个选择,然后是更新,而不是基于我的“where”条件的单一更新.有没有办法清理这个,所以选择和更新不一定是单独的查询? 解决方法在Rails 5中,有一个新的方便的ActiveRecord :: Relation#in_batches来解决这个问题:Foo.in_batches.update_all(bar: 'baz') 查看documentation了解更多选项 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |