如何使用Sequel发送原始查询字符串

时间:2016-11-17 09:05:42

标签: ruby rubygems sequel

我刚安装了"续集"宝石。我知道有很多方法可以让SQL更容易,但我认为这只会令人困惑。

有没有办法发送原始SQL查询,以便:

table.all

会是吗?

"SELECT * FROM table"

2 个答案:

答案 0 :(得分:2)

来自documentation

DB['SELECT * FROM table'].each do |row|
  p row
end

答案 1 :(得分:0)

You Can Just Use SQL”讨论了如何将SQL嵌入到Sequel表达式中,但如果你这样做,你就不会利用ORM的强大功能。相反,我建议您阅读并使用“Cheat Sheet”中的示例。

以下是来自README

的调整示例
require 'sequel'

DB = Sequel.sqlite

DB.create_table :items do
  primary_key :id
  String :name
  Float :price
end

items = DB[:items]
items.insert(:name => 'abc', :price => rand * 100)
items.insert(:name => 'def', :price => rand * 100)
items.insert(:name => 'ghi', :price => rand * 100)

此时,将存在一个内存中的SQLite DB,它将包含行。

items的基本查询是选择:

items.sql # => "SELECT * FROM `items`"

如果我们检查变量,我们得到:

items # => #<Sequel::SQLite::Dataset: "SELECT * FROM `items`">

再次显示查询。

all方法运行查询并返回结果:

items.all # => [{:id=>1, :name=>"abc", :price=>41.416988254871455}, {:id=>2, :name=>"def", :price=>40.44638070518766}, {:id=>3, :name=>"ghi", :price=>65.1898528586475}]

同样可以使用:

DB["select * from items"] # => #<Sequel::SQLite::Dataset: "select * from items">

再次,all将从数据库中检索信息并将其返回:

DB["select * from items"].all # => [{:id=>1, :name=>"abc", :price=>33.294219608356926}, {:id=>2, :name=>"def", :price=>29.25412438270755}, {:id=>3, :name=>"ghi", :price=>6.19681273957694}]

虽然没有像Sequel那样开始显示ORM的力量。通过自述文件,然后使用备忘单中的示例,这将更有意义。