r语言 - 如何将数据从 Shiny 保存到 MySQL 中



>我尝试制作一个简单的应用程序,它显示来自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)来执行INSERTsql命令? 您的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)
})

最新更新