csv更新数据库表

时间:2016-01-28 21:34:59

标签: mysql ruby-on-rails csv

目前我有一个填充表格的csv文件。我不想安排这个,所以它每天运行。然而,不是擦拭桌子,是否有可能拥有它,所以它只添加了尚未存在的东西?

让我说我现在有这种布局。

Title|Name|Date|Url|
1    |2   |3   |4  |

然后我的CSV里面有这个

Title|Name|Date|Url|
1    |2   |3   |4  |
1    |2   |3   |7  |

是否可以忽略csv的第一行并添加第二行,因为url列字段不同?

到目前为止我所拥有的是什么

require 'open-uri'
require 'csv'
namespace :event do
   task reload: :environment do
     ActiveRecord::Base.connection.execute("TRUNCATE events RESTART IDENTITY")
       gzipped = open('URL LINK HERE')
       csv_text = Zlib::GzipReader.new(gzipped).read
       csv = CSV.parse(csv_text, :headers=>true)
       csv.each do |row|
         Event.create(time: row[9], date: row[10], URL: row[8], eventname: row[7])

       end
   end
end

我知道显然我会考虑删除这个谎言并将其更改为某种更新吗?

 ActiveRecord::Base.connection.execute("TRUNCATE events RESTART IDENTITY")

如果它有帮助的话我也会使用rails吗?

1 个答案:

答案 0 :(得分:0)

您可以使用find_or_create_by,如下所示:

Event.find_or_create_by(time: row[9], date: row[10], URL: row[8], eventname: row[7])

除非在所有4个字段中找到匹配项,否则只会创建一个新行。

来源:http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-find_or_create_by