我有一个简单的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"
感谢任何帮助。
答案 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]