175

我正在尝试手动执行 SQL 命令,以便可以访问 NuoDB 中的过程。

我正在使用 Ruby on Rails,并且正在使用以下命令:

ActiveRecord::Base.connection.execute("SQL query")

“SQL 查询”可以是任何 SQL 命令。

例如,我有一个名为“反馈”的表,当我执行命令时:

ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")

这只会返回“真实”响应,而不是向我发送请求的所有数据。

这是 Rails 控制台上的输出:

SQL (0.4ms)  SELECT `feedbacks`.* FROM `feedbacks`
 => true

我想用它来调用 NuoDB 中的存储过程,但是在调用过程时,这也会返回一个“真实”的响应。

无论如何我可以执行 SQL 命令并获取请求的数据而不是获得“真实”响应吗?

4

5 回答 5

197

我用来执行自定义 SQL 语句的工作命令是:

results = ActiveRecord::Base.connection.execute("foo")

其中“foo”是 sql 语句(即“SELECT * FROM table”)。

该命令将返回一组值作为哈希并将它们放入结果变量中。

所以在我的 rails application_controller.rb 我添加了这个:

def execute_statement(sql)
  results = ActiveRecord::Base.connection.execute(sql)

  if results.present?
    return results
  else
    return nil
  end
end

使用 execute_statement 将返回找到的记录,如果没有,它将返回 nil。

这样我就可以在 Rails 应用程序的任何地方调用它,例如:

records = execute_statement("select * from table")

“execute_statement”还可以调用 NuoDB 过程、函数,也可以调用数据库视图。

于 2015-05-27T05:40:25.037 回答
158

对我来说,我无法让它返回一个哈希值。

results = ActiveRecord::Base.connection.execute(sql)

但是使用 exec_query 方法有效。

results = ActiveRecord::Base.connection.exec_query(sql)
于 2016-03-30T17:31:19.043 回答
40

从我们的论坛重新发布答案以帮助其他有类似问题的人:

@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
于 2014-07-14T15:16:23.233 回答
28
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }

上面的代码是一个例子

  1. 在您的数据库连接上执行任意 SQL
  2. 之后将连接返回到连接池
于 2015-04-22T22:17:41.323 回答
5

一旦你得到 MySql::Result 对象

results = ActiveRecord::Base.connection.execute(query)

您可以将其转换为行数组

results.to_a

将制作这种格式的数组

[[row1][row2]...]
于 2021-05-06T06:10:27.860 回答