¿Cómo se ejecutan manualmente comandos SQL en Ruby On Rails usando NuoDB?

Resuelto Patrick Angodung asked hace 10 años • 5 respuestas

Estoy intentando ejecutar manualmente comandos SQL para poder acceder a los procedimientos en NuoDB.

Estoy usando Ruby on Rails y estoy usando el siguiente comando:

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

La "consulta SQL" podría ser cualquier comando SQL.

Por ejemplo, tengo una tabla llamada "Comentarios" y cuando ejecuto el comando:

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

Esto solo devolvería una respuesta "verdadera" en lugar de enviarme todos los datos solicitados.

Este es el resultado en Rails Console:

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

Me gustaría usar esto para llamar a procedimientos almacenados en NuoDB, pero al llamar a los procedimientos, esto también devolvería una respuesta "verdadera".

¿Hay alguna manera de ejecutar comandos SQL y obtener los datos solicitados en lugar de obtener una respuesta "verdadera"?

Patrick Angodung avatar Mar 31 '14 09:03 Patrick Angodung
Aceptado

El comando de trabajo que estoy usando para ejecutar declaraciones SQL personalizadas es:

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

siendo "foo" la declaración SQL (es decir, "SELECCIONAR * DE la tabla").

Este comando devolverá un conjunto de valores como hash y los colocará en la variable de resultados.

Entonces, en mis rieles application_controller.rb agregué esto:

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

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

El uso de enable_statement devolverá los registros encontrados y, si no hay ninguno, devolverá nulo.

De esta manera puedo llamarlo en cualquier lugar de la aplicación Rails, como por ejemplo:

records = execute_statement("select * from table")

"execute_statement" también puede llamar a procedimientos, funciones y también vistas de bases de datos de NuoDB.

Patrick Angodung avatar May 27 '2015 05:05 Patrick Angodung

Para mí, no pude lograr que esto devolviera un hash.

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

Pero usar el método exec_query funcionó.

results = ActiveRecord::Base.connection.exec_query(sql)
Tim Park avatar Mar 30 '2016 17:03 Tim Park

Volviendo a publicar la respuesta de nuestro foro para ayudar a otros con un problema similar:

@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
MFredrickson-NuoDB avatar Jul 14 '2014 15:07 MFredrickson-NuoDB
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }

El código anterior es un ejemplo de

  1. ejecutar SQL arbitrario en su conexión de base de datos
  2. devolver la conexión al grupo de conexiones después
Andreas Rayo Kniep avatar Apr 22 '2015 22:04 Andreas Rayo Kniep