【问题标题】:Import CSV to existing sqlite database table将 CSV 导入现有的 sqlite 数据库表
【发布时间】:2013-03-13 21:44:33
【问题描述】:

我已经在这个论坛上搜索了上述问题的解决方案,但我尝试的一切都没有奏效。基本上,我有一个模型库,在我的 sqlite3 数据库中有相应的库表。我有一个名为 libraries.csv 的 csv 文件,其中包含我要导入数据库的所有数据。

我在this page 的第二个答案上尝试了该方法,但仍然无法正常工作。我确保在 lib/tasks 文件夹中创建了我的 rake 文件 'import_libraries.rake,并且我还将 library.csv 文件保存在该文件夹中,但我不断收到此错误消息:

耙子中止!
不知道如何构建任务“import_libraries”(参见 通过使用 --trace 运行任务来完整跟踪)

这是我正在使用的当前代码:

require 'csv'
desc "Imports a CSV file into an ActiveRecord table"
task :import, [:filename] => :environment do    
    CSV.foreach('libraries.csv', :headers => true) do |row|
      Library.create!(row.to_hash)
    end
end

但是当我运行 bundle exec rake import_libraries 时,我收到了上面的错误消息。

我做错了什么吗?我会很感激你们的帮助。谢谢

编辑

我将 rake 文件从 import_libraries.rake 重命名为 import.rake 在运行 bundle exec rake import 时,我现在得到的错误消息是:

rake 中止! UTF-8 中的无效字节序列 C:/Users/username/rails_app_name/lib/tasks/import.rake:4:in `block in ' 任务:TOP => 导入(通过运行任务查看完整跟踪 与 --trace)

【问题讨论】:

  • 你能发布你正在尝试的当前代码吗?
  • 对不起。我刚刚编辑了我的问题以包含代码
  • 你能贴几行.csv文件吗?
  • 尝试在import.rake文件的开头添加这一行:# encoding=utf-8

标签: ruby-on-rails-3 csv import sqlite rake-task


【解决方案1】:

根据您遇到的错误和您定义的任务,您应该调用:

bundle exec rake import  #=> you're currently calling import_libraries which indeed doesn't exist

使用rake,您调用task 是基于您为任务指定的名称,而不是文件的名称(请记住,每个 rake 文件中可以有许多任务)。

【讨论】:

  • 嗨弗门德斯。在这种情况下,我应该将我的 rake 文件重命名为 import 吗?
  • 不一定。您可以为该文件命名任何您想要的名称(它应该在 lib/task 中)。为了清楚起见,您应该给它一个描述性的名称。在执行 rake 任务时,重要的是您在 .rake 文件中使用您在 task :name_you_assign_to_the_task 中分配给它的名称。
  • 嗨。请查看我现在收到的新错误消息。谢谢
【解决方案2】:

我终于用这段代码解决了这个问题:

namespace :csv do

  desc "Import CSV Data"
  task :import => :environment do

    require 'csv'

    csv_file_path = 'lib/tasks/libraries.csv'

    CSV.foreach(csv_file_path, headers: true) do |row|
      row = Library.create!({
        :column_name1 => row[0],
        :column_name2 => row[1],
        :column_name3 => row[2],
        .
        . 
        :last_column => row[6]
      })
      puts "Success!"
    end
  end
end

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 1970-01-01
    • 2021-04-12
    • 2016-01-21
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多