我刚安装了"续集"宝石。我知道有很多方法可以让SQL更容易,但我认为这只会令人困惑。
有没有办法发送原始SQL查询,以便:
table.all
会是吗?
"SELECT * FROM table"
答案 0 :(得分:2)
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的力量。通过自述文件,然后使用备忘单中的示例,这将更有意义。