如何将dbSendQuery与R中的DataFrame值结合起来?

时间:2016-07-25 18:22:14

标签: mysql r rmysql

我正在寻找一种在sql谓词中包含来自R数据帧的数据的方法。理想情况下,我想使用dbSendQuery包中的RMySQL向我的数据库发送查询,该查询包含WHERE ... IN条件,其中包含来自我的数据库的值。这可能吗?

示例数据框

BUR
LAX
LGB

示例查询

SELECT * FROM table WHERE airport IN ('BUR', 'LAX', 'LGB')

有没有办法将我的数据框的行“传递”到查询?这可能是不可能的,但我很想知道。

1 个答案:

答案 0 :(得分:-1)

我通常创建一种"格式"字符串,然后使用sprintfpaste如下所示在值中

qformat <- "SELECT * FROM table WHERE airport IN (%s)"
vals <- c("BUR", "LAX", "LGB")

qstring <- sprintf(qformat, paste0("\"", vals, "\"", collapse = ","))
cat(qstring)
# SELECT * FROM table WHERE airport IN ("BUR","LAX","LGB")

如果你必须做很多事情,只需将凌乱的部分包裹在一个函数中:

someFunc <- function(x) paste0("\"", x, "\"", collapse = ",")
qstring <- sprintf(qformat, someFunc(vals))

如果您担心SQL注入,请查看?dbEscapeStrings