Rails – 在PostgreSQL中将CSV条目导入为数组
我正在使用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; dog; foo; bar”的条目。 现在,这个条目被导入到PostgreSQL中作为“文本”(即数据类型)。 但是,我希望将文本拆分为“;”,并将拆分结果作为文本数组存储在PostgreSQL中。
我该怎么做呢?
编辑澄清:
我的数据看起来像这样:
column 1 | column 2 | column 3 row 1 John | Jack; Carol | Seth; Annie; Doug row 2 Jim; Cassie; Jane | Anne | Laura; Bob
现在,当我运行我的rake任务时,“John”作为文本进入PostgreSQL。 “Laura; Bob”也作为文本进入PostgreSQL。 但是,我想要“Laura; Bob”(以及类似地,“Jack; Carol”,“Seth; Annie; Doug”和“Jim; Cassie; Jane”)作为文本数组进入PostgreSQL。 一个这样的arrays看起来像[杰克,卡罗尔]。
试试这个
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"]}