Milk+ea

Weblog Is My Hobby.

Sequelのデータセットで使うアクションメソッド

SQLメソッド→)続き

アクションメソッドを使うと実際にSQLを実行した結果をゲッツできます。

帰ってくる結果

データを取ってくるモノだけで、insertとかは除く。

  • 数値1つ → そのまま数値
  • 復数の数値 → 数値のArray [数値1, 数値2]
  • 1行 → Hash {col: val}
  • 複数行 → HashのArray [{col: val}, {col: val}]

以降dataset = DB[:tables]

アクションメソッド

データをテーブルへ入れる .insert << .multi_insert .import

# 全部のカラムに入れる
dataset.insert(val1, val2...)

# 特定のカラムに
dataset.insert(col1: val, col2: val)
dataset << {col1: val, col2: val}

# 復数のinsertを1行で書く

# 1つのcolに対して
dataset.multi_insert([{col: val1}, {col: val2}])
# => insert into tables (col) values (val1) 
# => insert into tables (col) values (val2)

# 復数のcolに対して
dataset.import([:col1, :col2], [[val1, val2], [val3, val4]])
# => insert into tables (col1, col2) values (val1, val2) 
# => insert into tables (col1, col2) values (val3, val4)

テーブルのデータを削除する .delete

# 全部
dataset.delete
# => 数値

# 条件に当てはまるもの
dataset.where(col: val).delete

テーブルが存在する?しない? .empty? .exists

dataset.empty?
# => true or false

dataset.exists
# => <Sequel::SQL::PlaceholderLiteralString:0x2f2cd40>

データを取ってくる .all .get .first .last .select_hash

dataset.all
dataset.where(attr: val).all
# => {col: val} か [{col: val}, {col: val}]

# 最初のデータのvalだけ
dataset.get(:col)
# => val

# 最初のデータ
dataset.first
# => {col: val}

# 最後のデータ (orderは必須みたい)
dataset.order(Sequel.desc(:col)).last
# => {col: val}

# colのどれかをkey, valに選んで取ってくる
dataset.select_hash(:col1, :col2)
# => {col1-1: col2-1, col1-2: col2-2....}

行毎になにかする .each .map

dataset.each{ |row| p row }
# => {col: val}
# => {col: val}

dataset.map(:col)
# => [val1, val2]
dataset.map{ |row| row[:col] * 2 }
# => [val1 * 2, val2 * 2]

行数.count・最大.max・最小.min・合計.sum・平均.avg・範囲.range

dataset.count(:col)
dataset.max(:col) # col列の最大値
dataset.min(:col)
dataset.interval(:col) #col列の最大値 - 最小値
dataset.sum(:col)
dataset.avg(:col)
dataset.range(:col) # min..max
# => 数値

# whereやhavingを使うと絞れる
dataset.where(col: val).sum(:col)
dataset.group(:col).having('col2 > ?', 2).count(:col2)

テーブルにどんなカラムがあるか調べる .columns

dataset.columns
# => [:col1, :col2]

他にもあるけども、よくわからないので今はいいや。。