【问题标题】:Save changes to sqlite db via shiny通过闪亮保存对sqlite db的更改
【发布时间】:2015-08-08 09:47:28
【问题描述】:

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

【问题讨论】:

    标签: sqlite shiny


    【解决方案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())
    }))
    

    【讨论】:

      【解决方案2】:

      是的,这是可能的。您可以使用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 和其他一些带 Shiny 数据库的更完整示例,以防万一。免责声明:我写了那个应用程序。 http://daattali.com/shiny/google-form-mock/

      【讨论】:

      • 如何确保数据库文件和包含它的文件夹对闪亮用户具有写入权限?我正在使用带有 sqlite 的 Windows,并且我知道如何更改权限,但是如何为闪亮用户添加写权限?
      • 我不知道如何在 Windows 上做到这一点,我会谷歌它
      • 我做到了,但我没有找到任何东西:/ 我的问题是我的计算机上本地保存了一个 sqlite 数据库,我希望我的闪亮应用程序(托管在 shinyapps.io 上)插入新的根据用户输入将数据行放入表中。有一次我让它工作了,但是在归档/删除应用程序并再次部署它之后,它无法插入新行。它可以很好地读取数据库,但无法将新行插入表中,很奇怪。顺便说一句,不错的应用,Shiny 的持久数据存储
      • 谢谢。但至于你的问题,我真的不知道,对不起!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多