Я использую tiny_tds для извлечения данных из нескольких разных баз данных.На данный момент у меня есть файл Ruby с несколькими методами, каждый из которых посвящен определенному запросу (поскольку базы данных очень большие, и не все скрипты, которые я использую, требуют одинакового вида / объема данных).Чтобы было проще и понятнее, я хотел отделить сами запросы SQL в один файл, а не встраивать их в файл Ruby, содержащий функции.Но запросы SQL зависят от определенных полей, имеющих определенные значения.По сути, я пытаюсь отправить переменную в запрос SQL, получить данные на основе этого конкретного значения в поле и передать эти данные обратно в файл Ruby.
Итак, упрощенная версиято, что я сейчас делаю, это:
def initialize
@client = TinyTds::Client.new(:username => '', :password => '', :host => '', timeout: 0)
end
def query_example(value)
results = @client.execute("SELECT DISTINCT field1, field2, field3
FROM db
WHERE field1 = '#{value}'
")
results.each {|x| return x}
end
Сценарий вызывает функцию query_example(value)
и на основе переменной value
получает соответствующие данные для этого случая.
Но то, что я хотел бы, это, по сути, иметь один файл, который не имеет ничего, кроме необработанных запросов SQL, например:
SELECT DISTINCT field1, field2, field3
FROM db
WHERE field1 = '#{value}'
, где #{value}
заполняется внешним значением, переданным ему (хотя я 'я не уверен, как этот тип подстановочного знака будет объявлен здесь).Допустим, я сохраняю этот файл как «query.sql», тогда я просто хотел бы прочитать этот файл в функцию Ruby, например:
def query_example(value)
query = File.read("query.sql")
results = @client.execute(query)
end
Проблема в том, что я не знаю, как передать этоvalue
аргумент в самом файле SQL, так что данные, извлекаемые с помощью команды execute
, являются конкретными данными для этого значения.Возможно ли это с tiny_tds, или tiny_tds просто не создан для такого двустороннего взаимодействия между внешними запросами SQL и вызывающими их функциями Ruby?Я открыт для рассмотрения других библиотек SQL, я просто очень незнаком с опциями, так как я имею дело главным образом с Ruby.