我想要迭代一个具有数据库表名的数组,我想创建一个这样的散列:
{"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
^请注意,我不是在研究如何返回列名。
发布于 2018-03-21 04:12:28
使用.map创建一个新数组并传递块。这应该是可行的:
arr_table_names.map do |table|
rs = pg_conn.execute "SELECT * FROM #{table} WHERE Id=0"
{table => rs.fields}
endUpdate,您想要一个以表名作为键,列作为值的散列,因此:
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)
endhttps://stackoverflow.com/questions/49392901
复制相似问题