RODBCext将查询中的NA替换为空

时间:2018-11-27 10:15:47

标签: r postgresql postgresql-9.5 rodbc sql-parametrized-query

我已经使用软件包Rodbcext在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在R中将NA中的NA值转换为PostgreSQL中的null,但是由于某种原因在DELETE上却没有。

您看到实现这一目标的任何方法吗?我知道我可以为每行执行一个循环和一个特定的查询,但是我更喜欢在一个查询中进行所有操作,就像我对INSERT所做的那样,而且我想有一个我不知道的选项可以为我。

谢谢!

0 个答案:

没有答案