如何使用NuODB在Ruby on Rails中手动执行SQL命令

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

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

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

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

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

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

这只会返回";true";而不是将请求的所有数据发送给我。

这是Rails控制台上的输出:

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

我想用它来调用NuODB中的存储过程,但在调用过程时,这也会返回";true";响应。

有没有什么方法可以执行SQL命令并获取请求的数据,而不是获取";true";响应?

254024 次浏览

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

@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }

上面的代码是一个例子

  1. 在数据库连接上执行任意SQL
  2. 然后将连接返回到连接池

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

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

其中“ foo ”是SQL语句(即“ SELECT*FROM TABLE ”)。

此命令将以散列形式返回一组值,并将它们放入结果变量中。

因此,在我的Rails应用程序_Controller.rb上,我添加了以下内容:

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


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

使用EXECUTE_语句将返回找到的记录,如果没有,则返回nil.

通过这种方式,我可以在Rails应用程序的任何地方调用它,例如:

records = execute_statement("select * from table")

“执行_语句”还可以调用NUODB过程、函数以及数据库视图。

对我来说,我不能让它返回哈希。

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

但是使用EXEC_查询方法是可行的。

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

获得MySQL:Result对象后,

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

您可以将其转换为行数组。

results.to_a

将生成此格式的数组

[[row1][row2]...]