【问题标题】:How do I import a CSV file into an SQLite database with the sqlite3 gem for Ruby如何使用 Ruby 的 sqlite3 gem 将 CSV 文件导入 SQLite 数据库
【发布时间】:2012-08-05 19:55:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby sqlite csv sqlite3-ruby


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我想我需要以其他方式解析 CSV 文件。感谢您的提示。
    【解决方案2】:

    使用 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]]
    

    【讨论】:

    • 嗯,看来,在它的根,脚本必须循环遍历 CSV 文件并将行/项目插入数据库。我说的对吗?
    • 我相信你可以使用 Ruby 的可枚举方法(例如#each_slice)来批量生成 500 个,然后一次性执行(你只需要创建正确的 sql 并将其与正确的数组。
    【解决方案3】:

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

    %x(
    sqlite3 "#{pathToDatabase}" << EOF
    .mode csv
    .separator ',' "\\\\n"
    .import "#{pathToCsvFile}" "#{csvTableName}"
    EOF
    )
    

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2016-01-21
      • 2014-12-02
      • 1970-01-01
      • 2012-05-04
      • 2020-08-23
      相关资源
      最近更新 更多