R — Могу ли я передать аргумент командной строки с помощью Rscript в запрос с помощью RMySQL dbConnect?

Я пытаюсь передать аргумент идентификатора сайта в виде целого числа из Rscript в командной строке в оператор SQL внутри dbConnect с использованием RMySQL. Однако я получаю сообщение об ошибке «Ошибка в mysqlQuickSQL (conn, statement, ...): неиспользуемые аргументы («3», « AND name = 'HVAC # 1 Supply Temp' ORDER BY created DESC LIMIT 15;)"

user@debian:~$ 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, чтобы я мог получить оба по отдельности, прежде чем объединять их в идентификаторе сайта. Будем признательны за любую помощь или обратную связь. Спасибо


person user3794794    schedule 22.12.2014    source источник


Ответы (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;"))
person MrFlick    schedule 22.12.2014
comment
Было бы безопаснее использовать параметризованный запрос - person hadley; 17.02.2015