Ich versuche, SQL-Befehle manuell auszuführen, damit ich auf Prozeduren in NuoDB zugreifen kann.
Ich verwende Ruby on Rails und verwende den folgenden Befehl:
ActiveRecord::Base.connection.execute("SQL query")
Die "SQL-Abfrage" kann ein beliebiger SQL-Befehl sein.
Wie zum Beispiel habe ich eine Tabelle namens "Feedback" und wenn ich den Befehl ausführe:
ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")
Dies würde nur eine "wahre" Antwort zurückgeben, anstatt mir alle angeforderten Daten zu senden.
Dies ist die Ausgabe auf der Rails Console:
SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks`
=> true
Ich möchte dies verwenden, um gespeicherte Prozeduren in NuoDB aufzurufen, aber beim Aufrufen der Prozeduren würde dies auch eine "wahre" Antwort zurückgeben.
Kann ich trotzdem SQL-Befehle ausführen und die angeforderten Daten abrufen, anstatt eine "echte" Antwort zu erhalten?
quelle
ActiveRecord::Base.connection.execute
. Könnten Sie bitte darauf hinweisen, was genau Sie geändert haben, um die Daten zu erhalten, anstatt nurtrue
?Für mich konnte ich das nicht dazu bringen, einen Hash zurückzugeben.
Die Verwendung der exec_query-Methode hat jedoch funktioniert.
quelle
.exec_query
Gibt einActiveRecord::Result
Objekt zurück, das mit leicht zugänglichen Attributen.columns
und.rows
Attributen sehr praktisch ist ..execute
Gibt eine Reihe von Hashes zurück, die normalerweise schwieriger zu handhaben sind und wahrscheinlich mehr Speicher benötigen. Ich hatte noch nie benutztexec_query
, danke für den Tipp..entries
verwenden.exec_query
, um die Ergebnisse als Array von Hashes abzurufen.Reposting der Antwort aus unserem Forum, um anderen bei einem ähnlichen Problem zu helfen:
quelle
Der obige Code ist ein Beispiel für
quelle
ActiveRecord::Base.connection
ohne Aufruf verwendet wirdActiveRecord::Base.clear_active_connections!
. Siehe api.rubyonrails.org/v5.2/classes/ActiveRecord/...