Написание и обновление таблиц 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)
Спасибо другим авторам.