Sequel Là Gì?
Sequel là gem cho phép truy cập database, không cần Rails. Kết nối DB theo nhiều cách. Chủ yếu hai: Gửi raw SQL command, hoặc dùng ORM. Ví dụ raw SQL & MySQL:
require 'mysql2'
client = Mysql2::Client.new(host: "localhost")
results = client.query("SELECT * FROM users WHERE age > 21")
Kết quả? Mảng hash với data. Bây giờ: Muốn làm việc data cách OOP, cần biến kết quả thành object. Đó là phần lớn ORM làm. ORM là gì? Object-Relational-Mapping. Sequel, tên theo cách phát âm SQL (ngôn ngữ query DB), là ORM. Khám phá cách dùng!
Ví Dụ Sequel: Kết Nối Database
Bước đầu dùng Sequel là kết nối DB. Ví dụ:
require 'sequel'
DB = Sequel.sqlite('/tmp/testing.db')
Tạo object Sequel::Database & gán cho DB. Dùng SQLite3. Nhưng dùng khác: Sequel.postgres, Sequel.mysql2, Sequel.oracle. Tiếp theo? Cần tạo table lưu data. Cách tạo:
unless DB.table_exists?(:fruits)
DB.create_table :fruits do
primary_key :id
column :name, String
column :amount, Integer
end
end
Có hệ thống migration. Nhưng tùy chọn. Sẵn sàng thêm data & query DB!
Cách Dùng Sequel Datasets
Cần object dataset tương tác với table cụ thể trên DB. Cách lấy:
table = DB[:fruits] # Sequel::SQLite::Dataset
Tuyệt! Bây giờ thêm record với insert. Như sau:
table.insert(name: "Orange", amount: 10) table.insert(name: "Apple", amount: 2) table.insert(name: "Banana", amount: 7)
Đếm: table.count # 3. Lấy tất cả entry:
table.all
# [
# { id: 1, name: "Orange", amount: 10 },
# { id: 2, name: "Apple", amount: 2 },
# { id: 3, name: "Banana", amount: 7 }
# ]
Trông như mảng hash. Đúng vậy. Đó chính xác nó là. Sequel cho query DB không cần model. Nhưng có thể dùng model. Cách đây...
Cách Dùng Model Trong Sequel
Model Sequel giống ActiveRecord model. Ví dụ:
class Fruit < Sequel::Model end
Model hành xử như dataset, nhưng wrap kết quả trong class model. Xem:
Fruit.first # Fruit @values={:id=>1, :name=>"Orange", :amount=>10}
Dùng cùng method Sequel::Dataset. Không có "ma thuật" ở đây. Ví dụ thêm:
Fruit.map(:name) # ["Orange", "Apple", "Banana"] Fruit.where(name: "Apple").or(amount: 10).map(:name) # ["Orange", "Apple"] Fruit.first[:amount] # 10
Rất hay!
Sequel vs ActiveRecord
Bây giờ biết Sequel awesome, bạn tự hỏi so với ActiveRecord thế nào. ActiveRecord là ORM mặc định Rails. Rails rất thích convention. Tôi không nghĩ worth thử replace ActiveRecord bằng Sequel trong Rails app. Tuy nhiên. Nếu dùng framework khác, như Sinatra, Sequel là lựa chọn tuyệt vời!
Tóm Tắt
Bạn đã học làm việc database Ruby dùng ORM, trường hợp này gem Sequel Ruby. Bây giờ lượt bạn thử & vui vẻ! Cảm ơn bạn đã đọc.