我剛安裝了「續集」寶石。我知道有很多方法可以使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)」是相關的。 –