Как вручную выполнить команды 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`")


Это только вернет "истинный" ответ вместо отправки мне всех запрошенных данных.



это выход на Рельсы консоли это:



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


Я хотел бы использовать это для вызова хранимых процедур в NuoDB, но при вызове процедур это также вернет "истинный" ответ.



есть ли в любом случае я могу выполнить команды SQL и получить запрошенные данные вместо получения "истинного" ответа?

650   4  

4 ответов:

рабочая команда, которую я использую для выполнения пользовательских инструкций 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;" ) }

приведенный выше код является примером для

  1. выполнение произвольного SQL на вашей базе данных-соединение
  2. возврат соединения обратно в пул соединений после этого

Comments

    Ничего не найдено.