Я установил связь между R и SQL (PostgreSQL 9.5), используя пакет Rodbcext, слой поверх Rodbc, который разрешает параметризованные запросы.
Я пытаюсь построить функцию R, котораяудалите некоторые конкретные данные из определенной таблицы.
delete_SQL = function(data, table){
ch = odbcConnect(base,"postgres")
names = sqlColumns(channel=ch,table,schema="public",catalog = base)$COLUMN_NAME
query = paste0("DELETE FROM public.",table," WHERE ",paste0(names," = ?",collapse = " and "),";")
#query exemple : DELETE FROM public.protection WHERE id = ? and nom = ? and page = ? and type = ? and observation = ?;
sqlPrepare(ch, query)
sqlExecute(ch,data=data)
odbcClose(ch)
}
Моя проблема в том, что если в моем data.frame есть некоторые значения NA, sqlExecute отправит запрос в строках
DELETE FROM table WHERE id = 50 and nom = 'whatever' and page = NA and type = NA and observation = NA
, который не будет работать, потому что на стороне PostgreSQL данные имеют значение null, а не NA.Для такого же запроса с INSERT sqlExecute переводит значения NA в R как нулевые в PostgreSQL, но по какой-то причине в DELETE этого не происходит.
Видите ли вы какой-нибудь способ добиться этого?Я знаю, что могу сделать цикл и конкретный запрос для каждой строки, но я бы предпочел сделать все в одном запросе, как я делаю с INSERT, и я полагаю, что есть опция, о которой я не знаю, которая может выполнить работу дляменя.
Спасибо!