Skip to content

Instantly share code, notes, and snippets.

@marsbomber
Created October 22, 2011 11:34
Show Gist options
  • Save marsbomber/1305896 to your computer and use it in GitHub Desktop.
Save marsbomber/1305896 to your computer and use it in GitHub Desktop.
Convert CSV to SQLite
require 'csv'
SOURCE_CSV = "data.csv"
OUTPUT_SQL = "#{Time.now.to_a.first(6).reverse.join}.sql"
OUTPUT_DB = OUTPUT_SQL + ".db"
data_array = CSV.read(SOURCE_CSV, :quote_char => "'", :col_sep =>',', :row_sep =>:auto)
header_array = data_array.delete_at(0).map { |h| h.downcase.gsub(" ", "_") }
header_string = header_array.join(", ")
File.open(OUTPUT_SQL, 'w') do |f|
create_table = <<SQLSTATEMENT
CREATE TABLE vehicles (id INTEGER PRIMARY KEY AUTOINCREMENT, #{header_array.join(" varchar, ")} varchar);
SQLSTATEMENT
f.write(create_table)
data_array.each do |row|
insert_row = <<SQLSTATEMENT
INSERT INTO vehicles (#{header_string}) VALUES ('#{row.collect(&:strip).join("', '")}');
SQLSTATEMENT
f.write(insert_row)
end
end
`cat #{OUTPUT_SQL} | sqlite3 #{OUTPUT_DB}`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment