我想使用 R Shiny 将 csv 数据上传到 MySQL table 并显示

I would like to use R Shiny to upload csv data to MySQL table and display

很抱歉问了这么长的问题。我将以下 R 脚本写入 upload/append 我定期获取的一些 csv 文件到 MySQL 数据库。示例文件和架构结构已简化。

test.csv
v1,v2,v3
33,78,44
4,49,15
87,132,98

数据库架构名为 shiny,table 名为 tab1,列如下:
id - 主键,自增
v1 - varchar(10)
v2 - varchar(10)
v3 - varchar(10)

第一个代码片段中的基本 R 脚本工作正常,并将 CSV 文件中的数据附加到架构 table 并将自动递增的 ID 号添加到 SQL table.

我想要一个闪亮的应用程序来做同样的事情(上传并附加到 MySQL table),然后在 DT table 中显示刚刚上传的数据。除了以下问题外,第二个片段中的 Shiny 代码可以正常工作:

  1. 数据已上传到架构 table,但 id 列填充了 v1 数据,v1 列填充了 v2 数据,v2 列填充了 v3 数据,v3 列为 NULL
  2. 数据未显示在设备标识符中 table 除了值“TRUE”

任何想法或指向包含可能解决方案的页面的链接将不胜感激。

有效的基本 R 脚本如下:

library(RMySQL)

#Read in data to a data frame
data <- read.csv(test.csv", header = TRUE, sep = ",")

# input database access values
user = 'user'
password = 'password'
host = 'host'
dbname='shiny'

#connect to database
con <- dbConnect(MySQL(),
                 user = user,
                 password = password,
                 host = host,
                 dbname = shiny)

# write to database
dbWriteTable(conn = con, name = 'tab1', value = data, append = TRUE, header = TRUE, row.names=FALSE)

# remove data and inputs and disconnect
rm(data)
rm(dbname)
rm(host)
rm(password)
rm(user)
rm(con)
lapply(dbListConnections(MySQL()), dbDisconnect)

我正在尝试的闪亮代码如下:

# Shiny app for SQL append
library(shiny)
library(DT)
library(RMySQL)

# database access information
user = 'root'
password = 'rustymarmot'
host = 'localhost'
dbname='shiny'

#connect to database
con <- dbConnect(MySQL(),
                 user = user,
                 password = password,
                 host = host,
                 dbname = shiny)

## USER INTERFACE
ui <- fluidPage(
  
  ## App title
  titlePanel("SQL Upload"),
  
  ## Sidebar layout 
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", label = "File input", accept = c(".xlsx", ".xls", ".csv", ".ods"))
    ),
    ## End Sidebar layout
    mainPanel(
      tableOutput("contents")
    )
  )
)

# SERVER
server = shinyServer(function(input,output){
  output$contents = renderTable({
    inFile <- input$file1
    
    if (is.null(inFile))
      return(NULL)
    
    read.csv(inFile$datapath, header = TRUE)
    dbWriteTable(conn = con, name = 'tab1', value = inFile$datapath, append = TRUE, header = TRUE, row.names=FALSE)
  })
})

shinyApp(ui, server)

需要稍作改动。像这样使用,您就可以正确显示和上传数据。

data <- read.csv(inFile$datapath, header = TRUE)
dbWriteTable(conn = con, name = 'tab1', value = data, append = TRUE, header = TRUE, row.names=FALSE)
data