2012-08-08 81 views

回答

4

使用csv lib解析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]] 
+0

嗯,看起來,在它的根目錄下,腳本必須遍歷CSV文件並將行/項插入到數據庫中。我對麼? – Username 2012-08-08 18:35:47

+0

我相信你可以使用Ruby的枚舉方法(例如[#each_slice](http://rdoc.info/stdlib/core/Enumerable:each_slice))來批量說500,然後一次執行所有的(你只需要製作正確的sql並將其與正確的數組匹配即可。 – 2012-08-08 22:53:39

5

我不相信通過CSV導入/導出數據是通過sqlite3寶石本身完成的。您可以通過CSV庫將數據導入/導出Ruby對象,然後只需通過ActiveRecord或通過您正在使用的任何ORM將數據讀取/寫入數據庫即可。

FasterCSV應該在Ruby中爲你做。如果你碰巧也在使用Rails 3.2,我相信FasterCSV是Rails的CSV lib背後的默認實現。

+0

是的,我想我需要解析CSV文件的其他方式。謝謝你的提示。 – Username 2012-08-08 18:33:46

相關問題