Импортируйте файл CSV в sqlite3, используя скрипт Ruby - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть скрипт ruby, который считывает данные из некоторого CSV-файла и импортирует их в базу данных sqlite.Я легко могу выполнить эту задачу из консоли, используя следующую команду:

sqlite> .import <filename> <tablename>
sqlite> .import test.csv PROJECT_REPORT

Как мне добиться того же скрипта Ruby той же формы?

Я делаю что-то похожее, например, следующее (просто работа):

 CSV.foreach("timelog.csv") do |row|
     database.execute("INSERT INTO PROJECT_REPORT(
     Date,User,Activity,Comment)
     values
    (#{row[0]}, '#{row[1]}', '#{row[2]}', '#{row[3]}') ")
 end 

1 Ответ

2 голосов
/ 29 февраля 2012

Если это разовая работа, и у вас есть простой скрипт, который работает, почему бы не придерживаться того, что у вас уже есть? Если вам нужно увеличить сценарий ruby ​​и расширить его, посмотрите на DataMapper (или один из других ORM) в качестве интерфейса к вашей базе данных SQLite. Создайте простой класс, содержащий поля Date, User, Activiy и Comment, и пусть DataMapper сделает тяжелую работу с базой данных.

Обновлено с примером datamapper Вот простой псевдо-пример реализации datamapper. Это не проверено!

#datamapper configuration here
#.
#.
class UserActivity
 include DataMapper::Resource

  property :id,         Serial    
  property :log_date,       DateTime  
  property :user,       Text        
  property :activity    Text
  property :comment     Text
  property :created_at, DateTime
end

Итак, чтобы использовать его в вашем примере выше ...

CSV.foreach("timelog.csv") do |row|
  userActivity = UserActivity.new( :log_date => row[0], :user => row[1], :activity => row[2], :comment => row[3])
  userActivity.save!
end

Очевидно, что это не полное решение, но оно поможет вам начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...