español - ¿Cómo se ejecutan manualmente los comandos SQL en Ruby On Rails con NuoDB?
ruby tutorial (4)
El comando de trabajo que estoy usando para ejecutar sentencias SQL personalizadas es:
results = ActiveRecord::Base.connection.execute("foo")
con "foo" siendo el enunciado sql (es decir, "SELECCIONAR * FROM tabla").
Este comando devolverá un conjunto de valores como un hash y los colocará en la variable de resultados.
Entonces en mis carriles 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 execute_statement devolverá los registros encontrados y si no hay ninguno, devolverá nil.
De esta manera puedo simplemente llamarlo a cualquier lugar en la aplicación de rieles, como por ejemplo:
records = execute_statement("select * from table")
"execute_statement" también puede invocar procedimientos, funciones y también vistas de bases de datos de NuoDB.
Estoy intentando ejecutar comandos SQL manualmente 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.
Como 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 la consola de Rails es:
SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks`
=> true
Me gustaría utilizar esto para llamar a los procedimientos almacenados en NuoDB, pero al llamar a los procedimientos, esto también devolvería una respuesta "verdadera".
¿De todos modos puedo ejecutar comandos SQL y obtener los datos solicitados en lugar de obtener una respuesta "verdadera"?
Para mí, no pude hacer que esto devuelva un hash.
results = ActiveRecord::Base.connection.execute(sql)
Pero utilizando el método exec_query funcionó.
results = ActiveRecord::Base.connection.exec_query(sql)
Reposicionando 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
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }
El código anterior es un ejemplo para
- ejecutando SQL arbitrario en su conexión de base de datos
- devolviendo la conexión de vuelta al grupo de conexiones después