【问题标题】:Ruby SQlite SELECT Returning an Unwanted ArrayRuby SQlite SELECT 返回一个不需要的数组
【发布时间】:2017-12-07 16:20:41
【问题描述】:

我试图从 sqlite 数据库中获取几个值,但不是返回我是 SELECT-ing 的值,而是在另一个数组内的数组中返回该值。


我的代码:

def self.find(id, database_connection)
  name = database_connection.execute("SELECT name FROM pokemon WHERE id = ?", id)
  type = database_connection.execute("SELECT type FROM pokemon WHERE id = ?", id)

  pokemon_inst = Pokemon.new(id: id, name: name, type: type, db: database_connection)
end

问题:

当我运行pry.binding

name 输出[["Pikachu"]]

type 输出[["electric]]


这是否正常工作?我无法想象我应该打电话给name[0][0] 来访问数据,对吧?

【问题讨论】:

    标签: sql ruby sqlite select execute


    【解决方案1】:

    execute() 方法将它返回的所有内容包装在一个数组中,并且每个数据库行都放置在一个数组中。因此,对于被查询的单个值在两个数组中是正确的。

    由于一切正常,我将调整我的代码:

    def self.find(id, database_connection)
      pokemon = database_connection.execute("SELECT * FROM pokemon WHERE id = ?", id).flatten
      name = pokemon[1]
      type = pokemon[2]
    
      pokemon_inst = Pokemon.new(id: id, name: name, type: type, db: database_connection)
    end
    

    调整是针对flatten数组分配查询数据时分配该数组中的各个值。

    【讨论】:

    • 也可以使用 exec_query 和 to_hash 来获取键值对结果。
    • 也可以是name, type = database_connection.execute('SELECT name, type FROM pokemon WHERE id = ?', id).flatten。 Rails 类型中的注意是保留字。
    • 很高兴知道类型不受限制。
    猜你喜欢
    • 2013-01-11
    • 2014-02-28
    • 2013-12-25
    • 2016-04-24
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多