R Shiny: Возможно ли создать приложение Shiny, в котором пользователь может выбирать переменные SQL: s «where condition» и экспортировать результаты запроса

#r #shiny

#r #блестящий

Вопрос:

Как я могу сделать следующее в Shiny (или это возможно). Я хотел бы иметь пользовательский интерфейс, в котором пользователь может выбирать, что он хочет передать в SQL: s «where-condition». Затем пользователь может нажать кнопку «Выполнить», и результаты запроса экспортируются в его папку.

Например, у меня есть предложение sql: выберите * из Animaldata, где animal_type в (‘Cat’)

Теперь я хотел бы иметь пользовательский интерфейс, в котором пользователь может просто выбирать, что вводить в «where-condition». Таким образом, он видит опции «Dog», «Cat» и может выбрать те, которые он хочет. например, пользователь выбирает только «Dog» и нажимает «Выполнить», затем мы автоматически экспортируем результаты запроса в некоторую указанную папку.

Комментарии:

1. Смотрите эти серии статей shiny.rstudio.com/articles/overview.html или вы можете напрямую увидеть это shiny.rstudio.com/articles/persistent-data-storage.html

Ответ №1:

Это очень возможно (я делал это во многих приложениях). На ваш вопрос сложно ответить, поскольку это не конкретный вопрос кодирования. Также вы не указали, какое приложение базы данных вы используете, поэтому сложно посоветовать что-либо, связанное с драйверами R. Как правило, используйте драйвер, совместимый с DBI, и настоятельно рекомендуем передавать пользовательский ввод в виде списка параметров (для защиты от атак с использованием sql-инъекций).

 library(your DBI compliant package)

selections <- input$my_selections #input from shiny
selections <- as.vector(selections) #here may encounter driver/database compliance issues as you may or may not be able to pass-in a vector/array object.  If not you can pass-in a string and split it on the database end
selections <- paste0(as.vector(selections),collapse=",") #alternative input

conn <- #your connection to the database
result <- dbGetQuery(conn,"select * from Animaldata where animal_type in ( $1 )",
                     params=list(selections))