Я пытаюсь вручную выполнить команды SQL, чтобы получить доступ к процедурам в NuoDB.
Я использую Ruby on Rails и использую следующую команду:
ActiveRecord::Base.connection.execute("SQL query")
«SQL-запрос» может быть любой SQL-командой.
Например, у меня есть таблица с названием «Feedback», и когда я выполняю команду:
ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")
Это вернет только «истинный» ответ, а не отправит мне все запрошенные данные.
Вывод на консоль Rails:
SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks`
=> true
Я хотел бы использовать это для вызова хранимых процедур в NuoDB, но при вызове процедур это также вернет «истинный» ответ.
Могу ли я выполнить команды SQL и получить запрошенные данные вместо получения «истинного» ответа?
источник
ActiveRecord::Base.connection.execute
. Не могли бы вы указать, что именно вы изменили для получения данных, а не простоtrue
?Для меня я не мог заставить это вернуть хеш.
results = ActiveRecord::Base.connection.execute(sql)
Но использование метода exec_query сработало.
results = ActiveRecord::Base.connection.exec_query(sql)
источник
.exec_query
возвращаетActiveRecord::Result
объект , который очень удобно с легко доступным.columns
и.rows
атрибутами..execute
возвращает массив хэшей, с которыми обычно труднее справиться и, вероятно, больше памяти. Никогда не пользовалсяexec_query
, спасибо за подсказку..entries
при использовании.exec_query
для получения результатов в виде массива хэшей.Репост ответа с нашего форума, чтобы помочь другим решить аналогичную проблему:
@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;" ) }
Приведенный выше код является примером для
источник
ActiveRecord::Base.connection
без вызоваActiveRecord::Base.clear_active_connections!
. См. Api.rubyonrails.org/v5.2/classes/ActiveRecord/…