Как вручную выполнить команды SQL в Ruby On Rails с помощью NuoDB
Я пытаюсь вручную выполнить команды 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 и получить запрошенные данные вместо получения "истинного" ответа?
5 ответов
Рабочая команда, которую я использую для выполнения пользовательских операторов SQL:
results = ActiveRecord::Base.connection.execute("foo")
с "foo" является оператором sql (то есть "SELECT * FROM table").
Эта команда вернет набор значений в виде хэша и поместит их в переменную результатов.
Итак, на моих рельсах 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.
Для меня я не мог получить это, чтобы вернуть хэш.
results = ActiveRecord::Base.connection.execute(sql)
Но использование метода exec_query сработало.
results = ActiveRecord::Base.connection.exec_query(sql)
Повторно разместите ответ на нашем форуме, чтобы помочь другим с подобной проблемой:
@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;" ) }
Приведенный выше код является примером для
- выполнение произвольного SQL на вашем соединении с базой данных
- возвращение соединения обратно в пул соединений после
Как только вы получите объект MySql::Result
results = ActiveRecord::Base.connection.execute(query)
Вы можете преобразовать его в массив строк
results.to_a
сделает массив этого формата
[[row1][row2]...]