1

Ruby は比較的新しく、実行中: Ruby 1.9.2 および MySQL 5.5.19

mysql データベースの既存のテーブルに追加したいデータでいっぱいの csv ファイルがあります。csv ファイルにはヘッダーがありません。はい、このトピックに関してすでに複数の質問があることは承知しています。分解方法は次のとおりです。

回答 #1: LOAD DATA INFILE を使用する残念ながら、LOAD DATA INFILE を実行すると次のエラーが表示されます。これは、mysql プロンプトで (root として) 直接実行する方法と、Ruby スクリプトを使用して実行する方法の両方で試しました。csvファイルでさまざまなchmodオプションを試し、csvファイルを他のユーザーが機能すると言っているさまざまなディレクトリに移動しました。運がない。とにかく、この時点でほとんどの人はお勧めします...

回答 #2: LOAD DATA ローカル INFILE を使用する 残念ながら、これもエラーを返します。どうやら local infile は、セキュリティ上のリスクがあるため、デフォルトでオフになっている mysql オプションです。オンにしてみましたが、次のようなエラーしか表示されません: ERROR 1148 (42000): The used command is not allowed with this MySQL version and also undefined method `execute' for # (NoMethodError)

回答 #3: Rails に関するさまざまな回答を見つけることができますが、これらは状況に適合しません。これは Web アプリケーション用ではありません (Web アプリは後でアクセスする可能性があります)。データ分析を行うための 1 回限りのこととして、今のところデータベースにデータを追加しようとしています。

Ruby ファイルは信じられないほど単純なはずです。

require 'rubygems'
require 'csv' (or fastercsv?)
require 'mysql'

db = mysql.connect('localhost','root','','databasename')

CSV.foreach('filename.csv') do |row|
   ?????
   db.execute("INSERT INTO tablename ?????")
end

PS よろしくお願いします。LOAD DATA INFILE または LOAD DATA LOCAL INFILE の使用を指す回答はありません。それを機能させるためにすでに十分な時間を無駄にしています...

4

1 に答える 1

2

広告mysql:

LOAD DATA INFILE '/complete/path/csvdata.csv' INTO TABLE mytable(column1,column2,...);

広告ルビ

require 'csv'
require 'mysql'

db = mysql.real_connect('localhost','root','password','database')

file=CSV::Reader.parse('filename.csv')
file.each do |row|
  values = row.inject([]){|k,v| k<<"'#{v}'";k}.join(',')
  db.query("insert into table(column, column ...) values(#{values})")
end

db.close

csvファイルに必要なすべての列が含まれていると想定しています..

于 2012-05-07T23:08:59.450 に答える