如何将闪亮的应用程序中的反应性输入值插入MySQL数据库?

sch*_*dst 6 mysql r rmysql shiny r-dbi

我用R 的闪亮包创建了一个在线实验.假设我有3个被称为"折腾","决定" 和" 评级"的反应值. 此外,我在亚马逊网络服务RDS上推出了一个MySQL数据库.版本是MySQL 5.6.22. 我成功地设法将非反应值(如时间戳)发送到MySQL数据库.所以我假设问题是在Server.R代码中找到与MySQL对话的代码.对于非反应值,当代码在响应服务器功能之外(之前)时,它可以很好地工作.但是对于反应值,我认为它应该在某个地方. 我试过这段代码:



Server.R  
   library(shiny)
   library(RMySQL)
   library(DBI)
    con <- dbConnect(MySQL(), dbname="db", username="myname", password="mypassword", host="myhost.com", port=xxxx)
   function(input, output, session){
       sql <- reactive({
                paste("insert into scenario1 (toss, dec, rat, timestamp) 
                     values (",input$toss,",",input$decision,",",input$rating,"now())")
       })
       result<-reactive({dbSendQuery(con, sql())})
   }
Run Code Online (Sandbox Code Playgroud)

这样,我没有收到错误消息.所以错误可能在insert into-code中.

另外,我不确定我使用的包装是否适用于此目的.我尝试了很多东西.每当我通过将其保留在SQL-quote之外来添加一个无效值时它就会停止工作.我开始认为RMySQL缺少这个功能.insert into手册中没有任何内容.

有人能够发现我犯的错误吗?

sch*_*dst 1

最后,我可以使用以下代码运行查询:

writingMarks <- function(input){ 
    con <- dbConnect(MySQL(), dbname="db", username="myname", password="mypassword", 
           host="myhost.com", port=xxxx)   
    result <- sprintf<-("insert into scenario1 (toss, dec, timestamp) values (%s,%s,%s)",
                input$toss, input$decision, "now()")
    dbSendQuery(con, result)
}
Run Code Online (Sandbox Code Playgroud)

我无法运行paste查询。使用sprintf逗号可以减少混淆。

而且,是的,我确实必须添加一个isolate(). 我将它插入到一个observe(). 所以它看起来像这样:

observe({
    if (input$condition==1){
      isolate({
        writingMarks(input)
      })
    }
    return()
  })
Run Code Online (Sandbox Code Playgroud)