postgresql select语句结果为哈希

时间:2014-07-10 22:25:36

标签: ruby select hash

我有一个简单的sql select语句,只有2个选定的列。我想把结果变成一个简单的哈希。

results = db_conn.exec("SELECT hostname, ipv FROM clients")

我希望哈希看起来像这样:

"computer1"=>"192.168.0.1"
"computer2"=>"192.168.0.2"
"computer3"=>"192.168.0.3"

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

require 'pg'

conn = PGconn.open(
  :dbname => 'mytestdb',
  :user => 'postgres',
  :password => '',
)
result_set  = conn.exec("SELECT hostname, ipv FROM clients")

my_results = {}

result_set.each do |row|
  my_results[row['hostname']] = row['ipv']
end

p my_results

--output:--
{"computer1"=>"172.16.254.1", "computer2"=>"172.16.254.2"}

答案 1 :(得分:0)

我知道这仅适用于特定情况,但是例如,如果您使用pg gem运行查询,您将获得一个PG::Result对象,其中包含一些实用方法,可以使用查询返回的实际数据。

现在您在运行查询后可以执行的操作

results = db_conn.exec("SELECT hostname, ipv FROM clients")

由于您只选择在results上运行values方法的两列,因此会返回二维数组。

[
  ["computer1", "192.168.0.1"],
  ["computer2", "192.168.0.2"],
  ["computer3", "192.168.0.3"],
]

所以在那种情况下得到想要的结果

"computer1"=>"192.168.0.1"
"computer2"=>"192.168.0.2"
"computer3"=>"192.168.0.3"

您可以在Hash上重复使用::[]方法。所以最后的陈述将是

Hash[db_conn.exec("SELECT hostname, ipv FROM clients").values]