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]
他にもあるけども、よくわからないので今はいいや。。