我刚安装了“续集”宝石。我知道有很多方法可以使SQL更容易,但我认为这只是令人困惑。如何使用Sequel发送原始查询字符串
有没有一种方法来发送原始的SQL查询,以便:
table.all
会是什么?
"SELECT * FROM table"
我刚安装了“续集”宝石。我知道有很多方法可以使SQL更容易,但我认为这只是令人困惑。如何使用Sequel发送原始查询字符串
有没有一种方法来发送原始的SQL查询,以便:
table.all
会是什么?
"SELECT * FROM table"
DB['SELECT * FROM table'].each do |row|
p row
end
“You Can Just Use SQL”讨论如何嵌入到SQL表达式的续集,但你不会,如果你做到这一点采取一个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数据库将存在和将包含行。
的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}]
没有开始显示的力量不过像续集一样的ORM。阅读README,然后使用备忘单中的示例进行操作,这会更有意义。
这看起来很混乱,但任何新技术或语言在开始时都会让人感到困惑。研究其背后的概念,阅读文档并确定该工具是否对您有价值,以及您是否愿意努力学习它,也非常重要。像Sequel这样写得很好的ORM与编写原始SQL相比有许多优点,并且有很多缺点。当您坚持自己编写SQL时,您将失去优势,因为如果/当您更改为不同的DBM时,您将不得不重写这些查询。了解ORM并且不会发生。 –
你的问题在Sequel的文档中有介绍。 README和cheatsheet是学习工作原理的极好起点。饶恕并提出这样的问题显示出一点努力。 “[Stack Overflow用户需要多少研究工作?](http://meta.stackoverflow.com/questions/261592)”是相关的。 –