Написание и обновление таблиц DB2 с помощью r

Я не могу понять, как обновить существующую базу данных DB2 в R или обновить одно значение в ней.

Я не могу найти много информации по этой теме в Интернете, кроме очень общей информации, но нет конкретных примеров.

        library(RJDBC)

        teachersalaries=data.frame(name=c("bob"), earnings=c(100))




        dbSendUpdate(conn, "UPDATE test1 salary",teachersalaries[1,2])

А ТАКЖЕ

       teachersalaries=data.frame(name=c("bob",'sally'), earnings=c(100,200))




        dbSendUpdate(conn, "INSERT INTO test1 salary", teachersalaries[which(teachersalaries$earnings>200,] )

3 ответа

Решение

Вы пробовали передавать регулярные операторы SQL, как на других языках?

dbSendUpdate(conn, "UPDATE test1 set salary=? where id=?", teachersalary, teacherid)

или же

dbSendUpdate(conn,"INSERT INTO test1 VALUES (?,?)",teacherid,teachersalary)

По сути, вы задаете обычный оператор SQL DML с помощью маркеров параметров (этих вопросительных знаков) и предоставляете список значений в виде параметров, разделенных запятыми.

Попробуйте это, у меня получилось хорошо.

dbSendUpdate(conn,"INSERT INTO test1 VALUES (?,?)",teacherid,teachersalary)

Вам просто нужно передать обычную часть SQL так же, как и в любом другом языке программирования. Попробуйте это.

Чтобы обновить несколько строк одновременно, я построил следующую функцию.

Я проверил его с партиями до 10000 строк, и он отлично работает.

# Libraries
library(RJDBC)
library(dplyr)    

# Function upload data into database
db_write_table <- function(conn,table,df){
  # Format data to write
  batch <- apply(df,1,FUN = function(x) paste0("'",trimws(x),"'", collapse = ",")) %>%
  paste0("(",.,")",collapse = ",\n")

  #Build query
  query <- paste("INSERT INTO", table ,"VALUES", batch)

  # Send update
  dbSendUpdate(conn, query)
}

# Push data
db_write_table(conn,"schema.mytable",mydataframe) 

Спасибо другим авторам.

Другие вопросы по тегам