通过 shiny 将更改保存到 sqlite db

Save changes to sqlite db via shiny

是否可以 运行 连接到 sqlite 数据库的 Shiny 应用程序,它可以进行更改并保存到该数据库?我的问题类似于这个问题 - R script do not write in sqlite db if I run the script in shiny 但没有被接受的答案,所以不确定它是否有效。

是的。这是可能的,这是一个例子:

创建一个简单的数据库:

library(RSQLite)
con <- dbConnect(SQLite(), dbname="sample.sqlite")
dbWriteTable(con, "test", data.frame(value1 = letters[1:4], value2 = letters[5:8]))
dbDisconnect(con)

闪亮的应用程序:

library(shiny)
library(RSQLite)

runApp(list(
  ui = bootstrapPage(
    textInput("value1", label = "Value 1"),
    textInput("value2", label = "Value 2"),
    actionButton("action", label = "Write to DB"),
    hr(),
    tableOutput("table")
  ),
  server = function(input, output){
    data <- eventReactive(input$action, {
    con <- dbConnect(SQLite(), dbname="sample.sqlite")
    dbWriteTable(con, "test", data.frame(value1 = input$value1, value2 = input$value2, stringsAsFactors = FALSE), append = TRUE)
    data <- dbReadTable(con, "test")
    dbDisconnect(con)
    return(data)
  })
  output$table <- renderTable(data())
}))

是的,这是可能的。您可以使用 RSQlite 包。您需要先在您的机器上安装 SQLite 并创建一个数据库。您需要确保数据库文件和包含它的文件夹都对 shiny 用户(或任何用户 运行 shiny apps - 默认用户是 shiny)具有写入权限。 =15=]

这是您连接和保存数据的方式:

db <- dbConnect(SQLite(), file)
query <- sprintf("INSERT INTO %s (%s) VALUES ('%s')", TABLE_NAME, 
    paste(names(data), collapse = ", "), paste(data, collapse = "', '"))
dbGetQuery(db, query)
dbDisconnect(db)

这是一个 Shiny 应用程序,其中包含有关如何将 SQLite 和其他一些数据库与 Shiny 一起使用的更完整示例,以备不时之需。免责声明:我写了那个应用程序。 http://daattali.com/shiny/google-form-mock/