Как удалить выбранные строки в Shiny из MySQL - PullRequest
0 голосов
/ 03 февраля 2020

Мне нужно удалить выбранные строки из MySql База данных при нажатии кнопки «Удалить» в моем shinyapp. Он должен работать для многократного выделения так же, как и для одиночного выбора.

Я использую input $ table_rows_selected, но он возвращает идентификатор строки в кадре данных в Shiny, а не в MySQL. Вот почему это не работает.

Мой код:

library(shiny)
library(DBI)

con <- dbConnect(RMySQL::MySQL(), dbname = "test", username = "root", password = "password", host = "host", port = 3306)

onStop(function() {
  dbDisconnect(con)
})


ui <- fluidPage(
  DT::dataTableOutput("tbl"),
  actionButton("del", "Delete user"),
)

server <- function(input, output, session) {
  sqlOutput <- reactive({
    sqlInput <- "select * from test"
    dbGetQuery(con, sqlInput)
  })

  output$tbl <- DT::renderDataTable(sqlOutput(),
    server = TRUE, rownames = FALSE 
  )


  observeEvent(input$del, {
    delFunction(input$tbl_rows_selected)
  })

  delFunction <- function(id) {
    query <- sprintf("DELETE FROM test WHERE (`idtest` = '%d');", id)
    dbSendQuery(con, query)
  }
}

shinyApp(ui, server)

1 Ответ

1 голос
/ 03 февраля 2020

Я нашел решение, изменяющее эту часть кода:

  observeEvent(input$del, {
    delFunction(input$tbl_rows_selected)
  })

  delFunction <- function(id) {
    count <- id
    data <- sqlOutput()[count, 1]
    query <- sprintf("DELETE FROM test WHERE (`idtest` = '%d');", data)
    dbSendQuery(con, query)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...