4

这是我的 .CSV 文件的示例:

column1,column2
data,moreData
foo,bar
cats,dogs

使用 Ruby 和 sqlite3 gem,有没有办法制作一个 SQLite 数据库并将 .CSV 数据导入其中?

4

3 回答 3

6

用 csv 库解析 CSV,然后像往常一样插入它。

require "sqlite3"
require 'csv'

db = SQLite3::Database.new ":memory:"

# Create a database
rows = db.execute <<-SQL
  create table users (
    name varchar(30),
    age int
  );
SQL

csv = <<CSV
name,age
ben,12
sally,39
CSV

CSV.parse(csv, headers: true) do |row|
  db.execute "insert into users values ( ?, ? )", row.fields # equivalent to: [row['name'], row['age']]
end

db.execute( "select * from users" ) # => [["ben", 12], ["sally", 39]]
于 2012-08-08T18:01:19.413 回答
5

我不相信通过 CSV 导入/导出数据是通过sqlite3gem 本身完成的。您可以通过 CSV 库将数据输入/输出 Ruby 对象,然后只需通过ActiveRecord或您正在使用的任何 ORM 将数据读取/写入数据库即可。

FasterCSV应该在 Ruby 中为您完成。如果你碰巧也在使用 Rails 3.2,我相信 FasterCSV 是 RailsCSV库的默认实现。

于 2012-08-08T16:43:36.283 回答
1

您可以从 ruby​​ 调用 sqlite3 二进制文件:

%x(
sqlite3 "#{pathToDatabase}" << EOF
.mode csv
.separator ',' "\\\\n"
.import "#{pathToCsvFile}" "#{csvTableName}"
EOF
)
于 2019-07-03T14:02:00.893 回答