ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

Active RecordでPostgreSQLを操作する

今回はActive Recordを使ってデータを挿入する。

目次


Active RecordのWebページ

Active Recordの基礎
https://railsguides.jp/active_record_basics.html

テーブルやカラムを作成、変更する
Active Record
マイグレーション
https://railsguides.jp/active_record_migrations.html

データの読み書き
Active Recordの基礎 5 CRUD:
Active Record の基礎 | Rails ガイド



テーブルにデータを挿入する

テーブルは以前つくったものを使う。

実際にコードを書く。

activerecord_insert.rb

require 'active_record'
require 'dotenv/load'

ActiveRecord::Base.establish_connection(
    adapter:  ENV['myadapter'],
    host:     "",
    username: ENV['myusername'],
    password: "",
    database: ENV['mydatabase']
)

class Test < ActiveRecord::Base
end
#挿入するデータを配列に格納する
results = [
    [3,"男子シングルスカル","予選A",1,"クラブ3-1",2,"クラブ3-2",3,"クラブ3-3",4,"クラブ3-4",5,"クラブ3-5",6,"クラブ3-6"],
    [4,"女子シングルスカル","予選A",1,"クラブ4-1",2,"クラブ4-2",3,"クラブ4-3",4,"クラブ4-4",5,"クラブ4-5",6,"クラブ4-6"],
    [5,"女子クォドルプル","決勝",1,"クラブ5-1",2,"クラブ5-2",3,"クラブ5-3",4,"クラブ5-4",5,"クラブ5-5",6,"クラブ5-6"],
    [6,"男子エイト","決勝",1,"クラブ6-1",2,"クラブ6-2",3,"クラブ6-3",4,"クラブ6-4",5,"クラブ6-5",6,"クラブ6-6"]
]
#データをテーブルに挿入する
results.each do |result|
    Test.create(
        raceno: result[0],
        events: result[1],
        groups: result[2],
        rank1: result[3],
        crew_rank1: result[4],
        rank2: result[5],
        crew_rank2: result[6],
        rank3: result[7],
        crew_rank3: result[8],
        rank4: result[9],
        crew_rank4: result[10],
        rank5: result[11],
        crew_rank5: result[12],
        rank6: result[13],
        crew_rank6: result[14]
    )
end
#テーブルからデータを呼び出す
#全てのレコードを呼び出す
records = Test.all
#レコードごとにターミナル/PowerShellに表示する
records.each do |record|
    puts "raceno: #{record['raceno']} #{record['events']} #{record['groups']}"
    puts "#{record['rank1']}#{record['crew_rank1']}"
    puts "#{record['rank2']}#{record['crew_rank2']}"
    puts "#{record['rank3']}#{record['crew_rank3']}"
    puts "#{record['rank4']}#{record['crew_rank4']}"
    puts "#{record['rank5']}#{record['crew_rank5']}"
    puts "#{record['rank6']}#{record['crew_rank6']}"
end


コードの説明
クラスをつくるところまでは前回の記事を参照。

  • 挿入するデータを配列に格納する
  • テーブルにデータを挿入する
    • 配列をeachメソッドでループさせて挿入するデータを取りだす
    • テーブルに挿入するメソッドはcreate
    • カラム別に挿入する書式はカラム名: データ
  • テーブルからデータを呼び出す
    • 今回は全てのレコードを呼び出す。メソッドはall
    • eachメソッドで1行ずつ呼び出す
    • 呼び出したレコードをputsメソッドでターミナル/PowerShellに出力する
      • カラムの内容を呼び出す書式は変数名['カラム名']


実効する。
PostgreSQLサーバーを起動したあとに次のコマンドを実行する。

bundle exec ruby activerecord_insert.rb


実行結果

raceno: 1 男子エイト 予選A組
1着 A大学
2着 B大学
3着 Cクラブ
着 
着 
着 
raceno: 2 男子エイト 予選B組
1着 D大学
2着 E大学
3着 Fクラブ
着 
着 
着 
raceno: 3 男子シングルスカル 予選A
1着 クラブ3-1
2着 クラブ3-2
3着 クラブ3-3
4着 クラブ3-4
5着 クラブ3-5
6着 クラブ3-6
raceno: 4 女子シングルスカル 予選A
1着 クラブ4-1
2着 クラブ4-2
3着 クラブ4-3
4着 クラブ4-4
5着 クラブ4-5
6着 クラブ4-6
raceno: 5 女子クォドルプル 決勝
1着 クラブ5-1
2着 クラブ5-2
3着 クラブ5-3
4着 クラブ5-4
5着 クラブ5-5
6着 クラブ5-6
raceno: 6 男子エイト 決勝
1着 クラブ6-1
2着 クラブ6-2
3着 クラブ6-3
4着 クラブ6-4
5着 クラブ6-5
6着 クラブ6-6


今回挿入したデータも表示されている。
データの挿入と呼び出しに成功した。
クローリング、スクレイピングと合わせればデータ収集に役立つ。


今回の動作確認環境
macOS 10.13.4
Ruby 2.4.4p296
ターミナル 2.8.2

Windows10 1709
Ruby 2.5.1p57 [x64-mingw32]
Windows PowerShell 5.1.16299.251

PostgreSQL 10.3
Active Record 5.2.0
Pg 1.0.0
dotenv 2.3.0