我希望找到一种相对快速的方法将数据从CSV文件导入sqlite3
数据库,并将smarter_csv
标识为可能的候选人我在应用他们的数据导入方法时遇到了困难分批。
我有两个版本,第一个(基本版本)可用,第二个版本当前产生错误undefined method 'collection' for class
。
第一种方法一次一行地导入csv文件中的所有内容并成功运行:
f = File.open("newdata.csv", "r:bom|utf-8")
templist = SmarterCSV.process(f) do |row|
Alldata.create( row.first )
end
f.close
但是,当我尝试以块的形式执行此过程时,我得到了上面提到的问题。我的代码目前是:
f = File.open("newdata.csv", "r:bom|utf-8")
templist = SmarterCSV.process(f,{:chunk_size => 2}) do |chunk|
Alldata.collection.insert( chunk )
end
f.close
我对Rails一般都是新手,所以这可能是一个非常基本的问题,但任何建议和指导都会很棒
答案 0 :(得分:0)
关键问题是我没有在控制器中定义一个名为collection
的方法。将collection.insert
行更改为Alldata.create(chunk)
会删除错误并插入所有数据,但是,性能与第一种方法相同。目前正在考虑直接在sqlite3
进行导入,而不是通过rails,因为我相信性能会好得多。
通过sqlite3 console
执行此操作,将其从8小时进程转换为3秒进程:)