我正在将CSV文件导入名为import_csv
该表格包含first_name, last_name, email, phone_number, organization_id
我使用以下代码导入CSV
file = params[:file]
filePath = file.path
fileName = File.basename filePath
pg = ActiveRecord::Base.connection
rc = pg.raw_connection
rc.exec("COPY import_csv (first_name, last_name, email, phone_number) FROM STDIN WITH CSV")
file = File.open(filePath)
file::gets
while !file.eof?
# Add row to copy data
rc.put_copy_data(file.readline)
end
我想知道如何设置organization_id字段,而不必将其放入我要导入的.CSV文件中。
答案 0 :(得分:0)
按原样将csv文件导入新表。
现在,带有ADD COLUMN命令的修改表模式:
rc = pg.raw_connection
rc.exec(“ALTER TABLE import_csv ADD COLUMN organization_id integer;”)
现在应该这样做。
答案 1 :(得分:0)
我能够通过在COPY命令之前修改CSV来找到解决方法,如下所示:
require 'csv'
# Load the original CSV file
rows = CSV.read(filePath, headers: true).collect do |row|
hash = row.to_hash
hash.merge('phone_number' => '0')
hash.merge('a1' => hash['organization_id'].to_s + '#{organization_id}' )
end
# Extract column names from first row of data
column_names = rows.first.keys
txt = CSV.generate do |csv|
csv << column_names
rows.each do |row|
# Extract values for row of data
csv << row.values
end
end
这使我可以添加组织ID,而无需将其添加到CSV中。
如果有人有任何更好的建议,请告诉我,因为在导入21,000条记录时,只需重写就会将从0.045868导入的时间从0.858213秒导入