rubyプログラムで下記CSVファイル(csvライブラリは使わず)を読み込んで、mysqlのデータベースに保存したいのですが、どのようなコードを書けば良いでしょうか?
#human.csv
namae,sincho,taiju
shinsuke,180,90↲
sadao,165,58
kota,156,68
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
まずは、問題を分解しましょう。
- csv ファイルを読み込む。
- Ruby から MySQL にレコードを書き込む。
1 については、まずは
1.1 ファイルを1行ずつ読み込む
1.2 一行文のデータを , で区切って配列 or ハッシュにする
と分解して設計、実装してみるとよいです。
2 については、ActiveRecord をつかうのが比較的簡単ですが、なにかすでにアクセス方法のためのコードを持っていますか?
その辺りの事情をお知らせください。
参考資料:
投稿2016/02/29 14:48
総合スコア22322
0
ベストアンサー
mysql でなく、sqlite3 での例を示します。
3 つのファイルを用意します。
- create_table.rb # DB を作るための sql
- user.csv # csv ファイル
- csv.rb # activerecord で DB にアクセするサンプル
準備
$ gem install activerecord $ gem install sqlite3 $ sqlite3 blid.db < create_table.sql
実行例
$ ruby csv.rb #<ActiveRecord::Relation []> #<ActiveRecord::Relation [#<User id: 1, name: "foo", tel: "123-456-789", age: 10, created_at: "2016-03-01 12:39:00.365826", updated_at: "2016-03-01 12:39:00.365826">]> #<ActiveRecord::Relation []> #<ActiveRecord::Relation [#<User id: 1, name: "加藤", tel: "090-123-456", age: 50, created_at: "2016-03-01 12:39:00.375845", updated_at: "2016-03-01 12:39:00.375845">, #<User id: 2, name: "佐藤", tel: "090-999-999", age: 20, created_at: "2016-03-01 12:39:00.378284", updated_at: "2016-03-01 12:39:00.378284">]>
create_table.sql
drop table if exists users; create table users ( id integer primary key, name text, tel text, age int, created_at, updated_at );
user.csv
加藤,090-123-456,50 佐藤,090-999-999,20
csv.rb
require 'active_record' require 'sqlite3' ActiveRecord::Base.establish_connection( adapter: 'sqlite3', database: './blog.db' ) class User < ActiveRecord::Base end p User.all user = User.new(name: 'foo', tel: '123-456-789', age: 10) user.save! p User.all User.destroy_all p User.all FILE_NAME = 'user.csv' File.open(FILE_NAME) do |file| file.each_line do |line| vals = line.split(',') attr = { name: vals[0], tel: vals[1], age: vals[2].to_i } user = User.new(attr) user.save! end end p User.all
参考情報:
- ActiveRecordを単体で使ってみる http://qiita.com/windhorn/items/e5eefeb4bec485ca0d39
投稿2016/03/01 12:43
総合スコア22322
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
環境を用意して実行結果を確認してから投稿しようと思ったのですが、
エラーが手強く、環境が用意できていませんでした。
未検証のソースですが、参考になりますでしょうか?
MySQLにてスキーマ、テーブル定義を予め作成
lang
1#! ruby -Ku 2#load the CSV file 3file = File.open("C:\\tmp\\human.csv") 4 5file.close 6 7#import to MySQL database 8require 'mysql2' 9require 'active_record' 10ActiveRecord::Base.establish_connection( 11 adapter: "mysql2", 12 host: "localhost", 13 username: "xxxxxxxx", 14 password: "yyyyyyyy", 15 database: "test" # スキーマ名 16) 17 18class Item < ActiveRecord:Base 19 self.table_name = 'sample' # テーブル名 20 21 validates_presence_of :namae 22 validates_presence_of :sincho 23 validates_presence_of :taiju 24end 25 26insertData = [] 27file.each do |line| 28 item = Item.new 29 array = Array.new() 30 array.push(line.slit(",")) 31 32 item.namae = array[0] 33 item.sincho = array[1] 34 item.taiju = array[2] 35 36 insertData << item 37end 38 39Item.import isertData 40
投稿2016/03/01 10:41
編集2016/03/01 12:13総合スコア396
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/29 15:01