How can I iterate through a MySQL result set?

前端 未结 4 1801
轻奢々
轻奢々 2020-12-10 02:41

Here is the code I\'m using:

# Run the query against the database defined in .yml file.
# This is a Mysql::result object - http://www.tmtm.org/en/mysql/ruby/         


        
相关标签:
4条回答
  • 2020-12-10 03:26

    You could try using ActiveRecord::Base.connection.exec_query instead of ActiveRecord::Base.connection.execute which returns a ActiveRecord::Result (available in rails 3.1+)

    Then you can access it in various ways like .rows, .each, or .to_hash

    From the docs:

    result = ActiveRecord::Base.connection.exec_query('SELECT id, title, body FROM posts')
    result # => #<ActiveRecord::Result:0xdeadbeef>
    
    
    # Get the column names of the result:
    result.columns
    # => ["id", "title", "body"]
    
    # Get the record values of the result:
    result.rows
    # => [[1, "title_1", "body_1"],
          [2, "title_2", "body_2"],
          ...
         ]
    
    # Get an array of hashes representing the result (column => value):
    result.to_hash
    # => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
          {"id" => 2, "title" => "title_2", "body" => "body_2"},
          ...
         ]
    
    # ActiveRecord::Result also includes Enumerable.
    result.each do |row|
      puts row['title'] + " " + row['body']
    end
    
    0 讨论(0)
  • 2020-12-10 03:28

    Use :as => :hash:

    raw = ActiveRecord::Base.connection.execute(sql)
    raw.each(:as => :hash) do |row|
      puts row.inspect # row is hash
    end
    
    0 讨论(0)
  • 2020-12-10 03:36

    Look for @results.fields for column header.

    Example: @results = [[1, "Sergio", 22],[2, "Lazlow", 28],[3, "Zeus", 47]]

    @results.fields do |f|
      puts "#{f}\t"  # Column names
    end
    
    puts "\n"
    
    @results.each do |rows| # Iterate through each row
      rows.each do |col| # Iterate through each column of the row
        puts "#{col}\t"
      end
      puts "\n"
    end
    

    Hope it is helpful.

    0 讨论(0)
  • 2020-12-10 03:41

    If you are using mysql2 gem then you should be getting the mysql2 result object and according to the docs you should be able to do the following

    results.each do |row|
      # conveniently, row is a hash
      # the keys are the fields, as you'd expect
      # the values are pre-built ruby primitives mapped from their corresponding field types in MySQL
      # Here's an otter: http://farm1.static.flickr.com/130/398077070_b8795d0ef3_b.jpg
    end
    

    Checkout the documentation here

    So in you case you can do the following

    <% @results.each do |val| %>
       <%= "#{val['id']}, #{val['name']}, #{val['age']}" %>
    <% end %>
    

    Edit: you seem to be referring to the wrong doc check the Mysql2 gems doc.

    0 讨论(0)
提交回复
热议问题