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

时间:2015-05-13 11:29:09

标签: mysql r shiny rmysql r-dbi

我使用闪亮包为R创建了一个在线实验。假设我有3个无效值,称为 &#34 ;折腾","决定" 和" 评级"
另外,我在亚马逊网络服务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())})
   }

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

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

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

2 个答案:

答案 0 :(得分:1)

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

paste

我无法运行sprintf查询。使用isolate()可以减少与逗号的混淆。

而且,是的,我确实必须添加observe()。我将其插入observe({ if (input$condition==1){ isolate({ writingMarks(input) }) } return() }) 。所以它看起来像这样:

presentingViewController

答案 1 :(得分:0)

您遇到问题:

paste("insert into scenario1 (toss, dec, rat, timestamp)
values (",input$toss,",",input$decision,",",input$rating,"now())")

问题是:不,在此之前():

paste("insert into scenario1 (toss, dec, rat, timestamp)
values (",input$toss,",",input$decision,",",input$rating,",now())")

这应该使查询运行。查看准备好的语句,这将防止这种(非常常见的每个人都使它们)连接错误。