20210430のMySQLに関する記事は1件です。

seedを使って、DBにデータをインポートする

seedファイルとは seedファイルは、初期データをDBに入れる時に使うファイルのことです。 何かのアプリを作成する場合に、作成したDBにデータ(ユーザ登録データなど)を入れる際に使います。 1件づついれる方法もあれば、CSVファイルなどでデータをまとめてインポートすることもできるので、何かと重宝するファイルです。 この記事では、私が学習した基本的なseedの使い方とCSVファイルをインポートする方法をアウトプットしていきます。 なお、テーブルの作成やマイグレーションファイルの作成方法などは省略します。 学習環境 MacOS BigSur Ruby 2.6.5 Ruby on rails 6.0.3.6 Mysql 5.6.51 基本形 ここでは、「Hansoku」という名前のモデルを作成しており、マイグレーションファイルには、 20210416141031_create_hansokus.rb class CreateHansokus < ActiveRecord::Migration[6.0] def change create_table :hansokus do |t| t.string :hansoku_name, null: false t.integer :damage, null: false t.string :status, null: false t.timestamps end end end と記載しているとします。 そのモデルに対して、カラム名に応じて、保存したい値をseed.rbに以下のようにcreateメソッドの引数に保存したい値を定義してあげます。 seed.rb Hansoku.create( :hansoku_name => "金テキ", :damage => 100, :status => "動けない" ) この形が基本的な形です。 個別に複数作成する場合は、配列形式にしてやり、 seed.rb Hansoku.create[( :hansoku_name => "金テキ", :damage => 100, :status => "動けない" ),( :hansoku_name => "目つぶし", :damage => 60, :status => "動けない" )] などと記載してあげます。 CSVファイルをインポートする 次に、大量のデータをDBに初期データとして導入する方法として、CSVファイルをインポートする方法があります。 seedファイルにCSVファイルを読み込み、DBにインポートするのです。 require 'csv' CSV.foreach('db/hansoku.csv', encoding: 'Shift_JIS:UTF-8') do |hansoku| Hansoku.create( :hansoku_name => hansoku[0], :damege => hansoku[1], :status => hansoku[2], ) end 標準ライブラリのCSVライブラリを呼び出し、.foreachメソッドforeachメソッドについてはこちらを使用します。 このメソッドは、CSVファイルの各行がブロック変数に渡され、モデルに定義したカラムを「,」区切りのCSVファイルの左から順番に配列の添字で指定することができます。 上記コードで説明すると、 :hansoku_name => hansoku[0],   # インポートするCSVファイルの最初のカラムはモデルの「:hansoku_name」へ :damage => hansoku[1],   # インポートするCSVファイルの2番目のカラムはモデルの「:damage」へ :status => hansoku[2] # インポートするCSVファイルの3番目のカラムはモデルの「:status」へ といった感じでインポートされることになります。 なお、CSVファイルは指定されていないと文字コードのエンコード方式がshift-jisになっているので、エンコーディングが必要な場合は、変換させないとエラーが発生します。 最後にこのコマンド seedファイルに記載した後は、 rails db:seed のコマンドを実行してあげると、seedに書かれた内容をDBに反映させることができます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む