【问题标题】:Importing CSV file into Sqlite3 - easiest way to deal with created_at, updated_at columns?将 CSV 文件导入 Sqlite3 - 处理 created_at、updated_at 列的最简单方法?
【发布时间】:2013-02-10 13:02:41
【问题描述】:

我有一个 CSV 文件,我正在尝试使用 .import 命令将其导入 Sqlite3。 db 表有 updated_at 和 created_at 列,但我的 CSV 文件没有,所以当我运行导入时,我收到一条错误消息:“预期 18 列,只找到 16”

导入此文件的最简单方法是什么?

我尝试将 created_at、updated_at 列添加到 CSV 文件,但出现错误。

一些论坛建议使用 FasterCSV,但我不清楚如何使用 gem 来专门解决这个问题。

【问题讨论】:

  • 我通过重新创建没有 created_at updated_at 时间戳的表解决了这个问题。然后使用 sqlite3 控制台将文件导入临时表,然后将临时表中的信息导入目标表。

标签: ruby-on-rails ruby-on-rails-3 sqlite


【解决方案1】:

威廉,试试这个代码。将 CSV 导入数据库是 Ruby 代码,忽略 created_at 和 updated_at。

运行它:

  1. 将代码粘贴到新文件中。我们称之为 import.rb
  2. 编辑文件。将self.table_name = "mytablename" 中的“mytablename”一词更改为您要导入的表的实际名称。
  3. 在文件末尾附近,将 mydb.db 替换为 Sqlite3 文件的实际名称。它应该是文件的相对路径(相对于 import.rb)。
  4. 在命令行中输入:

    gem install active_record sqlite3
    ruby import.rb path/to/csvfile.csv
    

(如果您使用的是 Mac,请使用“sudo gem install 而不是仅使用“gem install”。)

好的,代码如下:


require 'rubygems'
require 'csv'
require 'active_record'
require 'sqlite3'

ActiveRecord::Base.configurations = YAML::load(DATA)
ActiveRecord::Base.establish_connection('development')

class Record < ActiveRecord::Base
  self.table_name = "mytablename" # <=== REPLACE THIS with your table name
end

CSV.foreach ARGV[0], :headers => true do |row|
  print "."
  hash = Hash[row]
  hash.delete("updated_at")
  hash.delete("created_at")
  Record.create! hash
end

puts "\nDone."

__END__
development:
  adapter: sqlite3
  database: mydb.db  # <=== REPLACE THIS with a relative path to your sqlite3 DB
  pool: 5
  timeout: 5000

【讨论】:

    【解决方案2】:

    如果created_atupdated_at 的值按如下方式添加到CSV 中,.import xyz.csv xyz 应该正确导入数据。

    ... | "2013-02-10 15:17:17" | "2013-02-10 15:17:17"
    

    以这种方式导入时遇到什么错误?

    当您使用库导入数据时,导入通过 ActiveRecord 接口进行,该接口自动添加 created_atupdated_at 字段,就像您从 GUI 添加记录时一样。

    查看Ruby on Rails - Import Data from a CSV file 的答案以获取代码示例。

    有关使用该库的信息,请参阅Ruby's csv standard library (which used to be FasterCSV previously)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多