2014-12-22 60 views
0

我想通過命令行上的Rscript將一個站點ID參數作爲整數傳遞給使用RMySQL的dbConnect內部的SQL語句。但是我收到一個錯誤 「mysqlQuickSQL(conn,statement,...)中的錯誤: 未使用的參數(」3「,」AND name ='HVAC#1 Supply Temp'ORDER BY created DESC LIMIT 15;「)」R - 我可以將使用Rscript的命令行參數傳遞給使用RMySQL dbConnect的查詢嗎?

[email protected]:~$ Rscript deltaTsql.R 3 

是我從命令提示符運行的。

我的劇本是

library(RMySQL,quietly=TRUE) 
library(rjson,quietly=TRUE) 

args <- commandArgs(TRUE) 
print(length(args)) 
as.integer(args[1]) 

con <- dbConnect(MySQL(), user="user", password="password", dbname="dbname", host="host") 

r1.dat <- dbGetQuery(con, "SELECT `site_id`,`name`,`value`,`created` FROM `table` WHERE `site_id` = ", args[1], " AND `name` = 'HVAC#1 Supply Temp' ORDER BY `created` DESC LIMIT 15;") 
r2.dat <- dbGetQuery(con, "SELECT `site_id`,`name`,`value`,`created` FROM `table` WHERE `site_id` =", args[1], " AND `name` = 'HVAC#1 Return Temp' ORDER BY `created` DESC LIMIT 15;") 

r <- merge(r1.dat,r2.dat,by=c("created","site_id")) 

r$supplytemp <- (r$value.x*(9/5)+32) 
r$returntemp <- (r$value.y*(9/5)+32) 

r$deltaT <- (r$returntemp-r$supplytemp) 
deltaT <- r$deltaT 

deltaTcheck <- function(deltaT) { 
if (deltaT>25) { 
return(1) 
} 
else if (deltaT<10) { 
return(-1) 
} 
else { 
return(0) 
} 
} 

deltaTout <- vapply(deltaT, deltaTcheck, numeric(1)) 
deltaTjson <- toJSON(deltaTout) 
deltaTjson 

我希望能夠以相同的參數傳遞給兩個獨立的SQL語句,這樣我可以將它們合併的站點ID之前單獨搶兩者。任何幫助或反饋將不勝感激。由於

回答

1

您需要paste()一起SQL語句到一個單一的字符值

r1.dat <- dbGetQuery(con, paste0("SELECT `site_id`,`name`,`value`,`created` 
    FROM `table` 
    WHERE `site_id` = ", args[1], " AND `name` = 'HVAC#1 Supply Temp' 
    ORDER BY `created` DESC LIMIT 15;")) 
+0

這將是更安全的使用參數化查詢 – hadley

相關問題