【问题标题】:uploading data from Shiny app into MySQL database将数据从 Shiny 应用程序上传到 MySQL 数据库
【发布时间】:2015-04-17 02:17:03
【问题描述】:

我真的需要帮助(我尝试了很多不同的案例并搜索了很多论坛和教程(( 目的很简单:我有一些 MySQL 数据库和表。我想将闪亮输入中的值插入到该表中。我需要 actionButton 而不是 submitButton,因为我的应用程序的另一个重要部分是实时更新。 此外,我已经尝试了远离 Shiny 的代码部分,并且一切正常。所以,问题出在 Shiny 命令中,但我不知道是什么。 这是我的代码的一部分(我几乎删除了所有内容,只留下了一个 selectInput 字段和 actionButton):

server.R

library(shiny)
library(RMySQL)

# function to connect to MySQL database and sending query of INSERT
writingMarks <- function(course,homework,valueToInsert){
     courseDB <- dbConnect(MySQL(), user="root", password="password",
                           host="111.111.111.1", db=course)
     query <- paste("INSERT INTO `",course,"`.`homework",homework,
                    "` values (",rowToInsert,")",sep="")
     dbSendQuery(conn=courseDB, query)
     connections <- dbListConnections(MySQL())
     for(i in connections) {dbDisconnect(i)}
}


shinyServer(
     function(input,output,session){
# here I've put "mathematics", "1", "test" instead my input variables
          output$uploadMarks <- 
               reactive({writingMarks("mathematics","1","test")})
     }
)

ui.R

library(shiny)

shinyUI(fluidPage(
          fluidRow(
               column(2,selectInput("task1", label=NULL,
                                    choices = c(0:5), 
                                    selected = 0))
               ),
          actionButton("uploadMarks","Занести оценки в журнал")
     )
)

【问题讨论】:

  • 看来你需要定义rowToInsert或者使用valueToInsert。也可以将connections &lt;- dbListConnections(MySQL()) for(i in connections) {dbDisconnect(i)} 替换为lapply( dbListConnections( dbDriver( drv = "MySQL")), dbDisconnect) 以简化它。详情请见:here

标签: mysql r shiny


【解决方案1】:

我没有检查MySql 函数的写入,只是闪亮的部分。让我知道它是否有效。
你应该只关心shinyServer中的修改。

library(shiny)

ui.R <- shinyUI(
  fluidPage(
    fluidRow(
      column(2,selectInput("task1", label=NULL,
                           choices = c(0:5), 
                           selected = 0))
    ),
    actionButton("uploadMarks","Занести оценки в журнал")
  )
)





library(shiny)
library(RMySQL)
Sys.setlocale(category = "LC_ALL", locale = "Russian")



server.R<-shinyServer( ##here
  function(input,output,session){
    observe({
      # Take a dependency on input$uploadMarks
      if(input$uploadMarks==0) return()

      #Use isolate() to avoid dependency on input$task1
      isolate({
        current_selection<-input$task1
        writingMarks("mathematics",current_selection,"test")
      })#iso
    }
    )
  }
)


runApp(list(
  ui={ ui.R},
  server =  {
    # function to connect to MySQL database and sending query of INSERT
    writingMarks <- function(course,homework,valueToInsert){
      courseDB <- dbConnect(MySQL(), user="root", password="password",
                            host="111.111.111.1", db=course)
      query <- paste("INSERT INTO `",course,"`.`homework",homework,
                     "` values (",rowToInsert,")",sep="")
      dbSendQuery(conn=courseDB, query)
      connections <- dbListConnections(MySQL())
      for(i in connections) {dbDisconnect(i)}
    }
    server.R
  }
))

【讨论】:

  • 斯坦尼斯拉夫,非常感谢!我的问题是我没有完全理解使用isolate() 的目的。现在一切正常!谢谢!对不起,我不能投票,因为我是初学者,我还没有声望(
  • 谢谢!祝你的项目好运!
  • 谢谢!由于您的帮助,它几乎完成了
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
相关资源
最近更新 更多