2016-11-17 78 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,然後使用備忘單中的示例進行操作,這會更有意義。