如何使selectInput()传递字符串进行查询

时间:2018-02-13 09:42:01

标签: r shiny

我正在使用.replace('.', '\.')从数据库中获取月份列表,并使用它们显示闪亮的下拉菜单。

selectInput()

然后我在另一个查询中使用上面的输入:

month <- dbGetQuery(con, statement = 
      paste( "select distinct month
                from table
                order by month
                            "))
selectInput("month", 
    "month", 
    sort(unique(month$month)),
    selected = NULL)

问题是,server <- shinyServer(function(input, output) { output$graph <- renderPlot({ ctab <- dbGetQuery(con, statement = paste("select colum1, column2 from table where month_of_year_name = ",input$month," ")) output$graph2 <- renderPlot({ }) }) 将月份作为1月份,我希望将其作为“Jan&#39;”。

3 个答案:

答案 0 :(得分:1)

当您使用'封装字符串时,可以简单地将"放入要粘贴的字符串中。例如:

ui <- fluidPage(
  selectInput('month','months: ', c('Jan','Feb','Mar')),
  h3('old_query'),
  textOutput('old_query'),  
  h3('new_query'),
  textOutput('new_query')
)

server <- shinyServer(function(input, output) {

  output$old_query <- renderText({
    paste("select colum1, column2
                               from table
                               where month_of_year_name = ",input$month,"")

  })

  output$new_query <- renderText({
    paste("select colum1, column2
          from table
          where month_of_year_name = '",input$month,"'")

  })
})

shinyApp(ui,server)

enter image description here

希望这有帮助!

答案 1 :(得分:1)

我建议使用sqlInterpolate来防止SQL注入攻击

server <- shinyServer(function(input, output) {

  output$graph <- renderPlot({

    ctab <- dbGetQuery(con, 
                       statement = 
                         sqlInterpolate(con, 
                                        "select colum1, column2
                                        from table
                                        where month_of_year_name = ?month",
                                        month = input$month))
  })
})

答案 2 :(得分:0)

我个人喜欢使用regex来创建我的查询,我认为它提供了非常好的灵活性和可读性

data <- reactive({
  query <- 'select colum1, column2 from table where month_of_year_name = "MONTH"'
  query <- gsub("MONTH",input$month,query)
  query <- noquote(query)
  dbGetQuery(con,query)
})

output$graph <- renderPlot({
  data()
})