如何将表中的数据从mysql读取到闪亮的

时间:2016-07-16 07:10:44

标签: mysql r shiny rmysql

我正在尝试构建一个闪亮的应用程序。我在数据库中有3个表。该应用程序将从MySQL检索数据表并在Web界面上弹出。在ui函数中提到了所有选项。从我的MySQL中检索数据时,我已经写了3次readtable命令。有没有从一个可读表中检索数据的选项?

library(shiny)

# Define UI for dataset viewer application
ui<-fluidPage(

  # Application title.
  titlePanel("More Widgets"),

  sidebarLayout(
    sidebarPanel(
      selectInput("dataset", "Choose a dataset:", 
                  choices = c("table1", "table2","table3")),

      numericInput("obs", "Number of observations to view:", 10),

      submitButton("Update View")
    ),

    mainPanel(

      h4("Observations"),
      tableOutput("view")
    )
  )
)

# Define server logic required to summarize and view the 
# selected dataset
server<-function(input, output) {

    conn <- dbConnect(drv = RMySQL::MySQL(),dbname = "xxx",host = "localhost",
    username = "root",password = "yyy")
    on.exit(dbDisconnect(conn), add = TRUE)
    table1<- dbReadTable(conn = conn,  name = 'table1', value = as.data.frame(table1))
    table2<- dbReadTable(conn = conn,  name = 'table2', value = as.data.frame(table2))
    table3<- dbReadTable(conn = conn,  name = 'table3', value = as.data.frame(table3))

  # Return the requested dataset
  datasetInput <- reactive({
    switch(input$dataset,
           "table1" = table1,
           "table2" = table2,
        "table3" = table3
           )
  })

  # Show the first "n" observations
  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })
        on.exit(dbDisconnect(conn), add = TRUE)

}
shinyApp(ui, server)

3 个答案:

答案 0 :(得分:0)

for()功能可能有效:

data <- c('table1', 'table2', 'table3')

list_data <- list()

for(i in 1:length(data)) {list_data[i] <- dbReadTable(conn = conn,  name = data[i], value = as.data.frame(table1))}

答案 1 :(得分:0)

如果表格不是很大,您可以选择更简单的解决方案,即用以下内容替换output $ view

output$view <- renderTable({
     head(dbReadTable(conn = conn,  name = input$dataset), n = input$obs)
})

此代码不像代码那样缓存表,但更简单。但是,如果数据库中的表不是很大,则性能损失会很小。

答案 2 :(得分:0)

您可以使用input $ dataset而不是在dbReadTable语句中手动编写数据集的名称。

注意:如果表中的行大约为30,000,它将正常工作。

希望这会有所帮助。