[column1,...,columnN],"table2"=>[column1,...,columnM]...} 这-6ren">
gpt4 book ai didi

ruby - 创建散列,键是表名,值是列名

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:56 25 4
gpt4 key购买 nike

我想迭代一个包含数据库表名的数组,我想创建一个这样的散列:

{"table1"=>[column1,...,columnN],"table2"=>[column1,...,columnM]...}

这是我目前所做的:

arr_table_names = ['table1','table2','table3']

arr_table_names.each do |table|
rs = pg_conn.exec 'SELECT * FROM table WHERE Id=0'
column_names = rs.nfields
h = Hash.new{|hsh,key| hsh[key] = [] }
h[table].push ??? column_names ?? I don't know how in this line

end

我尝试使用 Sebastian 的解决方案,但出现语法错误:

def check_tables_same_content(table1,table2)
result = %w[#{table1} #{table2}].each_with_object([]) do |table, arr|
arr << { table.to_sym => @pg_conn.exec("SELECT * FROM #{table} WHERE false").fields }
end
puts result2
end
check_tables_same_content('company','company2')

company.rb:21:in `exec': ERROR: syntax error at or near "#" (PG::SyntaxError)
LINE 1: SELECT * FROM #{table1} WHERE false
^

请注意,我不是在研究如何返回列名。

最佳答案

使用.map 创建一个新数组并传递 block 。这应该有效:

arr_table_names.map do |table|  
rs = pg_conn.execute "SELECT * FROM #{table} WHERE Id=0"
{table => rs.fields}
end

更新,你想要一个以表名作为键、列作为值的散列,所以:

arr_table_names = ['table1','table2','table3']
hash = {}
arr_table_names.each do |table|
rs = pg_conn.execute "SELECT * FROM #{table} WHERE Id=0"
hash[table] = rs.fields
end

更新 2,您希望行数据作为散列中每一列(键)的数组:

arr_table_names = ['table1','table2','table3']
hash = {}
arr_table_names.each do |table|
rows = pg_conn.execute "SELECT * FROM #{table}"
hash[table] = rows.entries.map(&:values)
end

关于ruby - 创建散列,键是表名,值是列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49392901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com