我使用Ruby on Rails rake任务将.csv文件导入我的PostgreSQL数据库。我的代码供参考,如下:
require 'csv'
namespace :db do
desc "Populate database"
task populate_database: :environment do
CSV.foreach("db.csv", :headers => true) do |row|
Sale.create!(row.to_hash)
end
end
end
在.csv文件中,我有一个格式为" cat的条目;狗; FOO; BAR&#34 ;.现在,这个条目被导入到PostgreSQL中作为" text" (即数据类型)。但是,我希望将文本拆分为&#34 ;; "并且拆分的结果将作为文本 数组 存储在PostgreSQL中。
我该怎么做?
编辑澄清:
我的数据看起来像这样:
column 1 | column 2 | column 3
row 1 John | Jack; Carol | Seth; Annie; Doug
row 2 Jim; Cassie; Jane | Anne | Laura; Bob
现在,当我执行我的佣金任务时," John"以文本形式进入PostgreSQL。 "劳拉;鲍勃"也作为文本进入PostgreSQL。但是,我喜欢"劳拉;鲍勃" (同样地," Jack; Carol"," Seth; Annie; Doug"和" Jim; Cassie; Jane")作为文本进入PostgreSQL的阵列即可。一个这样的阵列看起来像[杰克,卡罗尔]。
答案 0 :(得分:0)
试试这个
csv_file = open("363Live data v0.csv")
CSV.parse(csv_file.read, {:headers => true}).each do |row|
# row is an array
puts row.inspect
Sale.create!(row.to_hash)
end
澄清后编辑:
假设 - 您的多个值始终由;
分隔
您可能需要检查每个单元格是否有;
然后转换为数组
# row => {"col1" => "John", "col2" => "Seth; Annie; Doug"}
CSV.foreach("363Live data v0.csv", :headers => true) do |row|
row.to_hash.map do |key, value|
row[key] = value.split(';').map {|v| v.strip} unless value.index(';').nil?
end
Sale.create!(row)
end
# row => {"col1"=>"John", "col2"=>["Seth", "Annie", "Doug"]}