Rails-在PostgreSQL中以数组形式导入CSV条目[英] Rails - import CSV entry as array in PostgreSQL

本文是小编为大家收集整理的关于Rails-在PostgreSQL中以数组形式导入CSV条目的处理方法,想解了Rails-在PostgreSQL中以数组形式导入CSV条目的问题怎么解决?Rails-在PostgreSQL中以数组形式导入CSV条目问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我在Rails Rake Task上使用Ruby将.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中,作为文本 array .

.

我该怎么做?

编辑澄清:

我的数据看起来像这样:

      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.但是,我想参加"劳拉;鲍勃"(同样,"杰克; carol","塞思;安妮;道格"和"吉姆; cassie; jane; jane; jane")作为文本数组.这样的阵列看起来像[杰克,卡罗尔].

推荐答案

尝试此

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"]}

本文地址:https://www.itbaoku.cn/post/1764098.html