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

How combine dbSendQuery with values from DataFrame in R?

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

示例数据框

BUR
LAX
LGB

示例查询

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

有没有办法 "pass" 我的数据框的行进行查询?这可能不可能,但我很想知道。

我通常创建一个 "format" 字符串,然后使用 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