我在 R 中有一个 data.frame -与大约 1000 多行匹配
names(matches)
[1] "name" "c_id" "fname" "lname" "address" "zip_code" "Weight"
nrow(matches)
[1] 1253
我有一个 postgresql 数据库表 -带有以下列的list_m
db_name、db_cid、db_weight、processing_status、request_id、fname、mname、lname 等。
我想使用 data.frame 中的值更新表中只有几列(db_c_id、db_weight 和处理状态)的值。
到目前为止,我正在遍历 data.frame 以创建更新查询,然后运行查询。
for(row in 1:nrow(matches) {
query1 <- paste0(query1, "UPDATE list_m SET db_name = ",matches$name[row],", db_weight = ",matches$weight[row],", processing_status = 'MATCHED'
WHERE request_id=111 AND db_c_id = '", matches$c_id[row], "';")
}
所以它基本上创建了一个 query1 变量
UPDATE list_m SET db_name = 'HILLARY', db_weight = 51.41, processing_status = 'MATCHED' WHERE request_id=111 AND db_c_id = '1015310246';
UPDATE list_m SET db_name = 'SANDERS', db_weight = 45.16, processing_status = 'MATCHED' WHERE request_id=111 AND db_c_id = '1015120982';
...
...
...
UPDATE list_m SET db_name = 'OBAMA', db_weight = 67.11, processing_status = 'MATCHED' WHERE request_id=111 AND db_c_id = '1015110111';
UPDATE list_m SET db_name = 'TRUMP', db_weight = 41.22, processing_status = 'MATCHED' WHERE request_id=111 AND db_c_id = '1013024634';
然后将使用
dbSendStatement(con, query1)
我想要的是通过参数化值来做到这一点..像
query2 <- "UPDATE list_m SET db_name=?,db_weight=?,processing_status='MATCHED' WHERE request_id=111 and db_c_id=?";
dbSendStatement(con, query2, matches$name, matches$weight, matches$c_id)
此语句应为匹配 data.frame 的每一行执行。