如何将 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" 字符串,然后使用 sprintf
和 paste
子值,如下所示:
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
。
我正在寻找一种方法来将来自 R
数据帧的数据包含在 sql 谓词中。理想情况下,我想使用 RMySQL
包中的 dbSendQuery
向我的数据库发送一个查询,其中包含 WHERE ... IN
条件,其中包括来自我的数据库的值。这可能吗?
示例数据框
BUR
LAX
LGB
示例查询
SELECT * FROM table WHERE airport IN ('BUR', 'LAX', 'LGB')
有没有办法 "pass" 我的数据框的行进行查询?这可能不可能,但我很想知道。
我通常创建一个 "format" 字符串,然后使用 sprintf
和 paste
子值,如下所示:
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
。