【问题标题】:How to show sql result on server console如何在服务器控制台上显示 sql 结果
【发布时间】:2023-03-26 14:45:02
【问题描述】:

Rails v2.3Ruby 1.8 中,如果我在模型类中使用以下代码运行 sql 语句

ActiveRecord::Base.connection.execute("select count(*) from cars;")

如何在服务器控制台显示查询结果?

我试过了:

rslt = ActiveRecord::Base.connection.execute("select count(*) from cars;")
p rslt

但它只在服务器控制台上返回“MySQL 结果对象”,而不是确切的结果。

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-2


    【解决方案1】:

    有几种方法可以从您的查询中获取 mysql“答案”。你可以调用 each ,它会遍历每一行(只有一行 - 在你的情况下计数)。查看mysql gem docs 以查看其他可用方法,例如each_hash 和all_hashes。

    rslt = ActiveRecord::Base.connection.execute("select count(*) from cars;")
    rslt.each {|mysql_result| puts mysql_result}
    

    【讨论】:

    • 你可以使用 .all_hashes
    【解决方案2】:

    您可以对结果使用to_a 方法,如下所示:

    result = connection.execute(sql)
    result.to_a
    

    这将返回(并在控制台中显示)您正在寻找的内容。

    【讨论】:

      【解决方案3】:

      这取决于您当前使用的环境。对于开发,默认记录器级别是 debug,对于生产,它是 info 级别。你可以这样使用它:

      class HomeController < ActionController::Base
        def index
          rslt = ActiveRecord::Base.connection.execute("select count(*) from cars;")
          logger.info "#{rslt}"
        end
      end
      

      您可以在 Mike Naberezny 的博客上阅读有关 Rails 日志记录的更多信息:http://mikenaberezny.com/2007/02/24/rails-logging-tips/

      【讨论】:

      • Rails 记录器不输出到服务器控制台,它输出到日志文件。此外 logger.info "#{rslt}" 将在日志中记录“MySQL 结果对象”,无论设置什么日志级别。
      • 是的,我的意思是 Rails 日志记录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2019-08-29
      • 2012-07-20
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多