我已经使用软件包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所做的那样,而且我想有一个我不知道的选项可以为我。
谢谢!