我尝试制作一个简单的应用程序,该应用程序显示mySQL表中的数据并帮助用户在其中保存新数据。
我已经连接数据库并阅读表。

当我从闪亮的输入中保存数据时,问题就开始了。我已经尝试了很多不同的案例,但对我没有帮助。
主要目的是在用户单击“添加用户”后在MySQL表中添加新行,并在UI中使用新数据更新表。

我的应用程序的简化版本:

library(DBI)

ui <- fluidPage(
  textInput("name", "Enter your name:"),
  numericInput("age", "How ald are you?", ""),
  submitButton("save", "Add user"),
  br(),
  tableOutput("tbl"),
)

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

  getDataSql <- function(query) {
    con = dbConnect(RMySQL::MySQL(), dbname  =  "database", host = "host", user = "root", password = "password", port = 3306)
    result <- dbGetQuery(con, query)
    dbDisconnect(con)
    result
  }

  saveDataSql <- function(query) {
    con = dbConnect(RMySQL::MySQL(), dbname  =  "database", host = "host", user = "root", password = "password", port = 3306)
    dbGetQuery(con, query)
    dbDisconnect(con)
  }

  output$tbl <- renderTable({
    query <- "SELECT * FROM test;"
    getDataSql(query)
  })

  observe({
    if (input$save > 0){
      query <- sprintf<-(paste("INSERT INTO `test` (`name`, `age`) VALUES ('", input$name, " ','", input$age, "');", sep = ""))
      saveDataSql(query)

    }
    return()
  })
}

shinyApp(ui, server)


UPD
我使用dbExecute更新了部分代码,但仍然无法正常工作。

observeEvent(input$save, { con = dbConnect(RMySQL::MySQL(),
        dbname = "stocktheft", host = "127.0.0.1", user = "root",
        password = "123456", port = 3306)
query <- paste("INSERT INTO test (name, age) VALUES ('", input$name, " ','", input$age, "');", sep = "")
dbExecute(con, query)
dbDisconnect(con) })


最佳答案

我只是从SQLDBI开始的,所以我可能是错的,但是您是否尝试过使用dbExecute(query)执行INSERT sql命令?
您的saveDataSql使用dbGetQuery检索数据,而不是实际执行INSERT

例如,如果我想添加索引,我通常会

SQLcommand <- "CREATE INDEX indxName ON myTable (myColumn)"
dbExecute(myDB,SQLcommand)


更新

您可能还需要检查submitButton的使用。您要在input$save > 0时将其保存到数据库,这永远不会发生,因为它们没有值。我会做些事情

# ui
actionButton("save", "Add user")

# server
observeEvent(input$save,{
    query <- sprintf<-(paste("INSERT INTO `test` (`name`, `age`) VALUES ('", input$name, " ','", input$age, "');", sep = ""))
    saveDataSql(query)
})

关于mysql - 如何将数据从Shiny保存到MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59965217/

10-13 06:13
查看更多