简体   繁体   English

使用R Shiny将CSV上载到SQL表

[英]Uploading csv to SQL table using R shiny

I've been scratching my head trying to figure this out. 我一直在摸索试图解决这个问题。

So I've connected to the database but when I press the action button nothing is happening to the table. 因此,我已经连接到数据库,但是当我按下操作按钮时,表没有任何反应。

The CSV is being converted to a data frame. CSV正在转换为数据帧。

UI 用户界面

library(shiny)
library(RJDBC)
library(dbtools)
library(jsonlite)
library(shinyjs)
library(DBI) 

# App title ----
  titlePanel("Uploading Files"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

      # Input: Select a file ----
      fileInput("file1", "Choose CSV File",
                multiple = TRUE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv")),
      tags$head(
        tags$style(HTML(
          '#Uploadbutton{background-color:cyan}'
        ))
      ),

      actionButton("Uploadbutton","Upload"),
      p("Upload Members if data looks ok")

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Data file ----
      tableOutput("contents")
    )

  )
)

Server 服务器

server <- function(input, output) {

  output$contents <- renderTable({

    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.

    req(input$file1)

    data <- read.csv(input$file1$datapath,header=TRUE)

    if(input$disp == "head") {
      return(head(data))
    }
    else {
      return(data)
    }
    data <- data.frame()
    data <<- read.csv(input$file1$datapath,header=TRUE)

    testdata <- read.csv("data",sep=",",row.names=1)

  observeEvent(input$Uploadbutton, {
       insert_into("data", "ANALYTICS.TEST_DATASTORE", con=lol, rows_per_statement=1)

        })

               }

  )

Hi I think what you are looking for is something like 嗨,我认为您正在寻找的是

DBI::dbWriteTable(con=lol, name = "ANALYTICS.TEST_DATASTORE",value = dta(),append = TRUE)

also I would structure the server function a bit different so that we don't need to use global variables 而且我将服务器功能的结构略有不同,因此我们不需要使用全局变量

server <- function(input, output) {

  dta <- reactive({
    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.

    req(input$file1)

    data <- read.csv(input$file1$datapath,header=TRUE)

    if(input$disp == "head") {
      return(head(data))
    }
    else {
      return(data)
    }

  })

  output$contents <- renderTable({
    dta()
  })

  observeEvent(input$Uploadbutton, {
    DBI::dbWriteTable(con=lol, name = "ANALYTICS.TEST_DATASTORE",value = dta(),append = TRUE)
  })
}

Hope this helps! 希望这可以帮助!

This will upload the file for you. 这将为您上传文件。 Then, send the data to SQL Server. 然后,将数据发送到SQL Server。

library(shiny)

# Define UI for data upload app ----
ui <- fluidPage(

  # App title ----
  titlePanel("Uploading Files"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

      # Input: Select a file ----
      fileInput("file1", "Choose CSV File",
                multiple = TRUE,
                accept = c("text/csv",
                         "text/comma-separated-values,text/plain",
                         ".csv")),

      # Horizontal line ----
      tags$hr(),

      # Input: Checkbox if file has header ----
      checkboxInput("header", "Header", TRUE),

      # Input: Select separator ----
      radioButtons("sep", "Separator",
                   choices = c(Comma = ",",
                               Semicolon = ";",
                               Tab = "\t"),
                   selected = ","),

      # Input: Select quotes ----
      radioButtons("quote", "Quote",
                   choices = c(None = "",
                               "Double Quote" = '"',
                               "Single Quote" = "'"),
                   selected = '"'),

      # Horizontal line ----
      tags$hr(),

      # Input: Select number of rows to display ----
      radioButtons("disp", "Display",
                   choices = c(Head = "head",
                               All = "all"),
                   selected = "head")

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Data file ----
      tableOutput("contents")

    )

  )
)

# Define server logic to read selected file ----
server <- function(input, output) {

  output$contents <- renderTable({

    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.

    req(input$file1)

    df <- read.csv(input$file1$datapath,
             header = input$header,
             sep = input$sep,
             quote = input$quote)

    if(input$disp == "head") {
      return(head(df))
    }
    else {
      return(df)
    }

  })

}
# Run the app ----
shinyApp(ui, server)

Thanks for all the help guys figured out how to do it this was the server side. 感谢所有帮助人员弄清楚该如何做,这是服务器端的帮助。

server <- function(input, output, session) { 服务器<-功能(输入,输出,会话){

output$contents <- DT::renderDataTable({ output $ contents <-DT :: renderDataTable({

# input$file1 will be NULL initially. #input $ file1最初将为NULL。 After the user selects # and uploads a file, head of that data file by default, # or all rows if selected, will be shown. 用户选择#并上传文件后,默认情况下将显示该数据文件的标题,即#或所有行(如果已选择)。

req(input$file1) req(input $ file1)

data <- read.csv(input$file1$datapath,header=TRUE) 数据<-read.csv(input $ file1 $ datapath,header = TRUE)

return(data) 返回(数据)

}) })

observeEvent(input$Uploadbutton, watchEvent(input $ Uploadbutton,

{insert_into(read.csv(input$file1$datapath),"ANALYTICS.TEST_DATASTORE")},once=TRUE ) {insert_into(read.csv(input $ file1 $ datapath),“ ANALYTICS.TEST_DATASTORE”)},一次= TRUE)

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM