Как выполнить команды 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 и получать запрошенные данные вместо получения "истинного" ответа?
Ответы
Ответ 1
Рабочая команда, которую я использую для выполнения пользовательских операторов 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.
Ответ 2
Для меня я не мог заставить это возвращать хэш.
results = ActiveRecord::Base.connection.execute(sql)
Но сработал метод exec_query.
results = ActiveRecord::Base.connection.exec_query(sql)
Ответ 3
Отправляя ответ с нашего форума, чтобы помочь другим с аналогичной проблемой:
@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
Ответ 4
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }
Приведенный выше код является примером для
- выполнение произвольного SQL в вашей базе данных
- возвращает соединение обратно в пул соединений