RODBCext заменит в запросе NA пустым - PullRequest
0 голосов
/ 27 ноября 2018

Я установил связь между 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, и я полагаю, что есть опция, о которой я не знаю, которая может выполнить работу дляменя.

Спасибо!

...