Как запускать необработанные SQL-запросы с Sequel
Я еще не понял, как правильно запускать необработанные SQL-запросы с Sequel.
В настоящее время я пытаюсь это:
DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1") do |row|
@zonename = row
end
Как я могу запустить запросы как raw SQL, а затем получить доступ к результатам, как обычно?
if @zonename.name = "UK"
2 ответов
у меня есть несколько указателей, которые могут быть полезны:
-
вы могли бы просто сделать:
@zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).first
NB: вы игнорируете тот факт, что может быть больше результатов, соответствующих критериям. Если вы ожидаете, что будет возвращено несколько возможных строк, вы, вероятно ,захотите создать массив результатов...
@zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).all
и обработка всех из них.
-
возвращаемый набор является хэшем. Если
@zonename
указывает на одну из записей тогда вы можете сделать@zonename[:column_name]
для ссылки на поле с именем "column_name". Ты не можешь этого сделать!--4--> (вы могли бы на самом деле украсить
@zonename
С вспомогательными методами, использующими некоторое мета-программирование, но давайте проигнорируем это на данный момент).
сиквел-отличный интерфейс, чем больше вы узнаете об этом, тем больше вам это понравится.
обратите внимание, что вместо:
DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1")
вы должны:
DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode)
В противном случае вы открываете себя для SQL-инъекции, если вы не контролируете содержимое @dialcode
.