将mysql结果转换为数组或哈希

将mysql结果转换为数组或哈希,mysql,ruby,sqldatatypes,Mysql,Ruby,Sqldatatypes,SQL查询:- Class Test def self.execute_mysql(host, database, query) Net::SSH.start('test.com', user, forward_agent: true) do |ssh| ssh.exec!("mysql -ppassword -utestuser -h #{host} #{database} -A --execute '#{query}'") end end 要运行的命令:- result

SQL查询:-

Class Test
def self.execute_mysql(host, database, query)
    Net::SSH.start('test.com', user, forward_agent: true) do |ssh|
      ssh.exec!("mysql -ppassword -utestuser -h #{host} #{database} -A --execute '#{query}'")
end
end
要运行的命令:-

result = Test.execute_mysql('app', 'sample', 'select * from foo')
结果字符串:-

id  name address age
1   ram US 25
2   sam US 30
3   jack India 32
.
.
.
.
100 Peterson US 27

结果变量以字符串类的形式返回。假设它返回100条记录。如何循环遍历每条记录?

您正在寻找类似的内容吗

 > result
 => "id  name address age\n1   ram US 25\n2   sam US 30\n3   jack India 32"
 > result.split(" ").each_slice(4){|e| print e }
 => ["id", "name", "address", "age"]["1", "ram", "US", "25"]["2", "sam", "US", "30"]["3", "jack", "India", "32"]

你的问题的答案取决于很多事情,你需要仔细地做很多检查,以使它更加可靠

不过,我会根据一些假设发布一个简单的答案,让您开始学习

res =  "id  name address age
        1   ram US 25
        2   sam US 30
        3   jack India 32"

arr = []
res.each_line {|line| arr << line.split(" ")}
arr
# => [["id", "name", "address", "age"], ["1", "ram", "US", "25"], ["2", "sam", "US", "30"], ["3", "jack", "India", "32"]]

现在,您可以轻松地迭代数组以访问特定属性

请发布结果字符串。这将有助于解释您从何处开始。@roob我已经更新了结果字符串。请看一下。有没有任何方法可以将结果转换成mysql对象,就像你现在做的那样,即使用ssh。据我所知,这是不可能的。但是,您可能想尝试mysql2 gem。以下为参考: