通过闪亮保存对sqlite db的更改

时间:2015-05-26 15:50:55

标签: sqlite shiny

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

2 个答案:

答案 0 :(得分:1)

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

创建一个简单的数据库:

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())
}))

答案 1 :(得分:0)

是的,这是可能的。您可以使用RSQlite包。您需要先在计算机上安装SQLite并创建数据库。您需要确保数据库文件和包含它的文件夹都具有shiny用户(或任何运行闪亮应用程序的用户 - 默认用户为shiny)的写权限。

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

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和其他一些有光泽的数据库,以防万一。免责声明:我写了那个应用程序。 http://daattali.com/shiny/google-form-mock/