2016-11-17 83 views
-2

我刚安装了“续集”宝石。我知道有很多方法可以使SQL更容易,但我认为这只是令人困惑。如何使用Sequel发送原始查询字符串

有没有一种方法来发送原始的SQL查询,以便:

table.all 

会是什么?

"SELECT * FROM table" 
+1

这看起来很混乱,但任何新技术或语言在开始时都会让人感到困惑。研究其背后的概念,阅读文档并确定该工具是否对您有价值,以及您是否愿意努力学习它,也非常重要。像Sequel这样写得很好的ORM与编写原始SQL相比有许多优点,并且有很多缺点。当您坚持自己编写SQL时,您将失去优势,因为如果/当您更改为不同的DBM时,您将不得不重写这些查询。了解ORM并且不会发生。 –

+1

你的问题在Sequel的文档中有介绍。 README和cheatsheet是学习工作原理的极好起点。饶恕并提出这样的问题显示出一点努力。 “[Stack Overflow用户需要多少研究工作?](http://meta.stackoverflow.com/questions/261592)”是相关的。 –

回答

0

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,然后使用备忘单中的示例进行操作,这会更有意义。