首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby on Rails -从CSV文件导入数据

Ruby on Rails -从CSV文件导入数据
EN

Stack Overflow用户
提问于 2010-12-11 00:08:58
回答 11查看 227.3K关注 0票数 215

我想将数据从CSV文件导入到现有的数据库表中。我不想保存CSV文件,只需要从其中获取数据并将其放入现有的表中。我使用的是Ruby 1.9.2和Rails 3。

这是我的表格:

代码语言:javascript
复制
create_table "mouldings", :force => true do |t|
  t.string   "suppliers_code"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "name"
  t.integer  "supplier_id"
  t.decimal  "length",         :precision => 3, :scale => 2
  t.decimal  "cost",           :precision => 4, :scale => 2
  t.integer  "width"
  t.integer  "depth"
end

你能给我一些代码来告诉我做这件事的最好方法吗,谢谢。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-12-11 00:15:51

代码语言:javascript
复制
require 'csv'    

csv_text = File.read('...')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
  Moulding.create!(row.to_hash)
end
票数 404
EN

Stack Overflow用户

发布于 2012-05-03 05:03:12

yfeldblum答案的更简单版本,它更简单,也可以很好地处理大文件:

代码语言:javascript
复制
require 'csv'    

CSV.foreach(filename, headers: true) do |row|
  Moulding.create!(row.to_hash)
end

不需要with_indifferent_accesssymbolize_keys,也不需要先将文件读入字符串。

它不会立即将整个文件保存在内存中,而是逐行读取并为每行创建一个Moulding。

票数 219
EN

Stack Overflow用户

发布于 2013-12-15 04:11:22

CSV gem是专门为这个用例创建的:从smarter_csv文件中读取数据并快速创建数据库条目。

代码语言:javascript
复制
  require 'smarter_csv'
  options = {}
  SmarterCSV.process('input_file.csv', options) do |chunk|
    chunk.each do |data_hash|
      Moulding.create!( data_hash )
    end
  end

您可以使用选项chunk_size一次读取N个csv-row,然后在内部循环中使用Resque来生成将创建新记录的作业,而不是立即创建它们-这样您就可以将生成条目的负载分散到多个workers。

另请参阅:https://github.com/tilo/smarter_csv

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4410794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档