如何使用Sequel运行原始SQL查询

我还不清楚使用Sequel运行原始SQL查询的正确方法。

目前我正在尝试这个:

DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1") do |row| @zonename = row end 

如何以原始SQL运行查询然后像正常一样访问结果?

 if @zonename.name = "UK" 

我有一些可能有用的指针:

  1. 你可以这样做:

     @zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).first 

    注意:您忽略了可能有更多匹配条件的结果的事实。 如果您希望返回多个可能的行,那么您可能希望通过执行以下操作来构建一个结果数组…

     @zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).all 

    并处理所有这些。

  2. 返回集是一个哈希。 如果@zonename指向其中一条记录,那么你可以这样做

     @zonename[:column_name] 

    引用名为“column_name”的字段。 你不能做@zonename.colum_nname (你实际上可以使用一些元编程用辅助方法来装饰@zonename ,但暂时忽略它)。

续集是一个很好的界面,你越了解它就越喜欢它。

请注意,而不是:

 DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1") 

你应该做:

 DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode) 

否则,如果不控制@dialcode的内容,则自己打开SQL注入。