【问题标题】:How to send raw query string using Sequel [duplicate]如何使用 Sequel 发送原始查询字符串 [重复]
【发布时间】:2016-11-17 09:05:42
【问题描述】:

我刚刚安装了“Sequel”gem。我知道有很多方法可以让 SQL 变得更简单,但我认为这只是令人困惑。

有没有办法发送原始 SQL 查询,以便:

table.all

会吗?

"SELECT * FROM table"

【问题讨论】:

  • 这可能看起来令人困惑,但任何新技术或语言在您开始时都会让人感到困惑。研究其背后的概念,阅读文档并确定该工具对您是否有价值以及您是否愿意努力学习它也非常重要。编写良好的 ORM,如 Sequel,与编写原始 SQL 相比具有许多优点,而缺点很少。当您坚持自己编写 SQL 时,您将失去优势,因为如果/当您更改为不同的 DBM 时,您将不得不重写这些查询。学习 ORM,这不会发生。
  • 您的问题已包含在 Sequel 的文档中。自述文件和备忘单是了解其工作原理的绝佳起点。摆脱困境并提出这样的问题显示出很少的努力。 “How much research effort is expected of Stack Overflow users?”是相关的。

标签: ruby rubygems sequel


【解决方案1】:

来自documentation

DB['SELECT * FROM table'].each do |row|
  p row
end

【讨论】:

    【解决方案2】:

    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 的强大功能。阅读自述文件,然后使用备忘单中的示例,它会更有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多