Передача входных переменных в DBGetQyery в Shiny R - PullRequest
0 голосов
/ 11 июля 2019

Заранее благодарим вас за ответы. Проблема, с которой я столкнулся при попытке динамически получить данные из базы данных SQLlite в приложении Shiny.Я пытаюсь передать входные переменные в некоторый SQL (используя paste0) в функции dbGetQuery.Я продолжаю получать ошибки Dyntax.Мне было интересно, если есть хороший способ передать несколько переменных в SQL.Я довольно новичок в базах данных и блестящий, спасибо за помощь!

output$servicerplot <-renderPlotly({

filtersurve <- dbGetQuery(db, statement = 
            paste0("SELECT Year,purpose,Product,seasoning,specPool,Servicer,TPO
                  FROM ServicerScurves
                  WHERE Year =",input$ServYear,
                  "AND purpose =",input$ServPurp,
                  "AND Product =",input$ServProd,
                  "AND seasoning =",input$ServACC,
                  "AND specPool =",input$ServSpec,
                  "AND Servicer =",input$Servicers,
                  "AND TPO =",input$ServTPO))

1 Ответ

0 голосов
/ 11 июля 2019

Рассмотрим отраслевой стандарт параметризации программирования, когда SQL вызывается из прикладного уровня (Java, Python, C #, PHP или R), который поддерживается в RSQLite . Вероятно, проблема в том, что вы неправильно заключаете строковые переменные в кавычки. Тем не менее, параметризация исключает необходимость в конкатенации или пунктуации.

output$servicerplot <- renderPlotly({

   # PREPARED STATEMENT
   sql <- "SELECT Year,purpose,Product,seasoning,specPool,Servicer,TPO
           FROM ServicerScurves
           WHERE Year = ?,
             AND purpose = ?
             AND Product = ?
             AND seasoning = ?
             AND specPool = ?
             AND Servicer = ?
             AND TPO = ?"

   res <- dbSendQuery(conn, sql)

   # BIND PARAMS
   dbBind(res, list(input$ServYear, input$ServPurp, input$ServProd, input$ServACC,
                    input$ServSpec, input$Servicers, input$ServTPO))
   filtersurve <- dbFetch(res)
   dbClearResult(res)

   return(filtersurve)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...