Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R SQL数据库-反应式筛选-最佳实践?_Sql_R_Dbi_Shiny Reactivity - Fatal编程技术网

R SQL数据库-反应式筛选-最佳实践?

R SQL数据库-反应式筛选-最佳实践?,sql,r,dbi,shiny-reactivity,Sql,R,Dbi,Shiny Reactivity,R和SQL的新特性 我已经制作了一些反应式仪表板,但还没有使用SQL数据库连接 这是我的玩具: 数据库是MySQL世界数据库。 我想连接不同的表并显示每个表中的一些列,但我希望能够按CountryLanguage表中的语言进行筛选 我的WHERE语句不起作用 当前代码: ui <- fluidPage( numericInput("nrows", "Enter the number of rows to display:", 5), sel

R和SQL的新特性 我已经制作了一些反应式仪表板,但还没有使用SQL数据库连接

这是我的玩具: 数据库是MySQL世界数据库。 我想连接不同的表并显示每个表中的一些列,但我希望能够按CountryLanguage表中的语言进行筛选

我的WHERE语句不起作用

当前代码:

ui <- fluidPage(
  numericInput("nrows", "Enter the number of rows to display:", 5),
  
selectizeInput("inputlang", label = "Language", choices = NULL, selected = NULL, options = list(placeholder = "Please type a language")),
  
tableOutput("tbl")
)

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

  output$tbl <- renderTable({
    conn <- dbConnect(
      drv = RMySQL::MySQL(),
      dbname = "shinydemo",
      host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com",
      username = "guest",
      password = "guest")
    on.exit(dbDisconnect(conn), add = TRUE)
   
dbGetQuery(conn, paste0(
      "SELECT City.Name, City.Population, Country.Name, Country.Continent, CountryLanguage.Language, CountryLanguage.Percentage
      FROM City 
      INNER JOIN Country on City.CountryCode = Country.Code
      INNER JOIN CountryLanguage on Country.Code = CountryLanguage.CountryCode
      WHERE CountryLanguage.Language = reactive({get(input$Selectize)})
      LIMIT ", input$nrows, ";"))


  })
}

shinyApp(ui, server)

ui
  • 在字符串中包含
    被动(…)
    不会被计算,它只是一个字符串。此外,
    DBI
    没有对查询使用
    glue
    ,因此
    {get(…)}
    将不起任何作用

  • 您将输入定义为
    input$inputlang
    ,但在反应式中,您引用了
    input$Selectize
    ,我认为这是一个错误

  • >P>您可能需要考虑参数化查询,人工构建查询字符串。虽然存在关于恶意的安全问题(例如,XKCD的又名“Little Bobby Tables”),但也存在格式错误字符串或Unicode与ANSI错误的问题,即使是单个数据分析师运行查询也是如此。
    DBI
    (使用
    odbc
    )和
    RODBC
    支持,无论是本机支持还是通过附加组件支持

    虽然这不适用于
    限制
    部分,但它对查询的大多数其他部分都很有用。对于该
    限制
    部分,
    req(is.numeric(input$nrows))
    应该是一个合理的检查,以确保意外注入问题

    试试这个:


    output$tbl谢谢-你说得对,re#2-我将名称改为inputlang,因此它更具描述性,而且很草率。我尝试了上面的代码,但似乎没有得到任何表格。如果我省略WHERE语句,我会按预期得到表,但我仍然坚持这一点。您是否尝试过手动查询(而不是在SHINK中)以确认您所期望的语言确实找到了?不知道数据库中有什么,也不知道您(或用户)正在输入什么,很难排除故障。如果我在没有语言过滤器的情况下运行代码,我得到的表会显示语言-列表上的第一个是Balochi,因此我一直将其输入我的selectize,但没有成功,我还尝试将我的selectize更改为一个select,并将几种语言作为选项,包括Balochi,当我这样做时,我会收到错误消息:unused argument(params=list(“Balochi”))
    
        df <-dbGetQuery ( SELECT & JOIN)
    
        dffilter <- df %>% filter ()