【问题标题】:Storing data of shiny into mySql将闪亮的数据存储到mySql中
【发布时间】:2019-07-10 06:42:27
【问题描述】:

我想将应用程序的输出插入到我的 sql 数据库中,我已成功在数据库和闪亮应用程序之间建立连接,这是我的代码

     library(shiny)
     library(DBI)
    ui <- fluidPage(
    textInput("id", "Enter your ID:", "1"),
 tableOutput("tbl")
)

server <- function(input, output, session) {
     output$tbl <- renderTable({
   conn <- dbConnect(
     drv = RMySQL::MySQL(),
  dbname = "shiny_database",
  host = "r.cr7lk1jwjdht.us-east-2.rds.amazonaws.com",
  username = "kartik",
  password = "12345678")
on.exit(dbDisconnect(conn), add = TRUE)
    query <- paste0("INSERT INTO db(id2 , id ) VALUES ('13','43') ")
  # dbGetQuery(conn, query)

 # query <- paste0("SELECT * FROM db WHERE id = '", input$id, "';")   
dbGetQuery(conn, query)

 })
  }
shinyApp(ui, server)

在这里我可以使用插入查询插入我的数据,但是当我有大量输出数据要插入时,在这种情况下我不能一次又一次地使用插入查询。 谁能帮助我如何插入我的数据。 搜索后我还发现有临时文件夹,其中输出是临时存储的,如果有可能我可以使用临时文件夹将数据放入数据库中。

【问题讨论】:

    标签: mysql r shiny amazon-rds shiny-server


    【解决方案1】:

    像下面的基本代码一样将数据框插入数据库。

    library(shiny)
    library(DBI)
    library(pool)
    pool <- dbPool(drv = RMySQL::MySQL(),dbname = "db_name",host = "host",username = "user_name",password = "password", port = 3306)
    
    ui <- fluidPage(
      submitButton("submit")
    )
    server <- function(input, output){
      dbWriteTable(pool, "dummyTable", df, append = TRUE) #this will insert the entire dataframe at once into dummyTable
    }
    
    shinyApp(ui, server)
    

    要继续使用此方法,您需要将所有值框到一个数据框中。当您提交按钮时,数据框将被插入到表中。 (除非重复,否则请勿发布用户凭据)

    【讨论】:

    • 感谢您的支持。但我有一个疑问,这里 dummyTable 是我必须在我的数据库中创建的表,它只包含具有合适名称和数据类型的属性?并确保 df 是数据框的名称。
    • 如果数据库中有一个名为dummyTable 的表并且您想将数据框df 存储到数据库中,则上述方法有效。 dfdummyTable 应该具有相同的数据类型和字段。
    • 否则,如果您的数据库中没有名为 dummyTable 的表,那么它会创建一个具有该名称的表并将您的数据框 df 存储到数据库中。
    • 感谢问题已解决。如果我想更改表中的属性名称保持我的数据框不变,我可以这样做吗?代替 dbWriteTable 中的 append=TRUE,我将写入 overwrite = TRUE。
    • 如果您建议我从数据库中检索数据的方法将非常有帮助,因为我想快速获得闪亮的应用程序输出@msr_003
    【解决方案2】:

    使用 actionButton() 怎么样? https://shiny.rstudio.com/reference/shiny/1.0.1/actionButton.html

    您可以将actionButton(inputId = "IDForActionButton") 放在ui.R 中。 actionButton() 在 UI 上创建一个按钮。 当按下按钮时,会触发重新计算 server.R 代码,其中包括 input$IDForActionButton

    您必须将input$id 用isolate() 括起来,如链接所示。 因为,如果不这样做,每次更改 input$id 的内容时,都会触发重新计算包含input$id 的 server.R 代码。

    可能使用池库会对您有所帮助。 https://shiny.rstudio.com/articles/pool-basics.html

    【讨论】:

    • 感谢您的回复,但在第二种情况下,它是手动执行选择查询,但我真正想要的是对大量属性执行插入查询,这是我无法通过手动添加查询来完成的,只要采取行动按下按钮它应该在数据库表中添加所有数据。如果我在任何地方错了,请纠正我。
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2023-03-05
    • 2011-02-08
    • 2015-08-26
    相关资源
    最近更新 更多