我需要从两个CSV文件中读取数据并将它们加载到两个不同的表中的SQLite3中。然后,我想查询两个表并创建一个需要输出到新CSV / Excel的新数据集。这样做最好的方法是什么?
我正在考虑SQLite3,Sequel和FasterCSV的组合。
还有一个CSV2SQLite gem,但我不确定如何使用它。
此外,如果有人有代码段,那将非常感激。
答案 0 :(得分:1)
require 'csv'
csv_file_1 = CSV.read("/home/user/Desktop/first_file_1.csv")
csv_file_2 = CSV.read("/home/user/Desktop/first_file_2.csv")
csv_file_1[0][0] = ["name", "phone"] #ect
#
# logic goes here to work with your csv files
#
require 'sequel'
DB = Sequel.sqlite("/home/user/Desktop/csv.db")
DB.create_table :people do
primary_key :id
String :name
String :phone
end
database = DB[:people]
database.insert(:name => "duck", :phone => "867-5309")
#logic goes here to insert/sort/manipulate your CSV files.
BOOM读取csv文件并使用续集ruby gem创建表。
答案 1 :(得分:0)
我使用另一个代码snipplet:
def import_csv(tabname, data)
csv = CSV.parse(data, :headers=> true, :header_converters => :symbol )
DB.create_table(tabname){
primary_key :id
csv.headers.each{|col|
String col
}
}
p csv.headers
DB[tabname].multi_insert(csv.map {|row| row.to_h})
#~ csv.each{|row|
#~ DB[tabname].insert(row.to_h)
#~ }
end
它读取CSV数据并创建表格列CSV-headers(作为字符串)。然后将所有数据复制到表格中。
一个完整的例子:
#encoding: utf-8
=begin
=end
require 'sequel'
require 'csv'
Sequel.extension :pretty_table #Sequel::PrettyTable.print()/Sequel::PrettyTable.string()
=begin
Test data
=end
DB = Sequel.sqlite
def import_csv(tabname, data)
csv = CSV.parse(data, :headers=> true, :header_converters => :symbol )
DB.create_table(tabname){
primary_key :id
csv.headers.each{|col|
String col
}
}
p csv.headers
DB[tabname].multi_insert(csv.map {|row| row.to_h})
#~ csv.each{|row|
#~ DB[tabname].insert(row.to_h)
#~ }
end
import_csv(:tab1, DATA.read)
DB.tables.each{|table|
puts table
Sequel::PrettyTable.print(DB[table])
}
#~ Sequel::PrettyTable.print(DB[:mytables].filter(Sequel.like(:a, 'a%')))
__END__
a,b,c,d,e
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5