我尝试制作一个简单的应用程序,该应用程序显示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) })
最佳答案
我只是从SQL
和DBI
开始的,所以我可能是错的,但是您是否尝试过使用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/