如何在R中的sql查询中传递函数参数? [复制]
Posted
技术标签:
【中文标题】如何在R中的sql查询中传递函数参数? [复制]【英文标题】:How to pass function parameters in sql query in R? [duplicate] 【发布时间】:2017-10-30 15:54:36 【问题描述】:我在R
中有如下函数:
dbhandle <- odbcDriverConnect('driver=SQL Server;
server=myServer;database=myDB;
trusted_connection=true')
func <- function(x)
sqlQuery(dbhandle, 'select attr from myTable where cond = x')
我想知道如何将x
参数传递给cond
属性的where
条件。比如我要计算func(10)
,那么查询一定是:
select attr from myTable where cond = 10
【问题讨论】:
请正确定义 parameter 的含义,因为有一个称为 SQL 参数化的概念,除了 RODBC 包中的一个之外,以下大多数答案都没有使用。跨度> 【参考方案1】:你可以试试paste
:
func <- function(x)
sqlQuery(dbhandle, paste('select attr from myTable where cond =', x))
【讨论】:
警告:这里不考虑sql注入xkcd.com/327【参考方案2】:在使用RODBC
时,我更喜欢使用参数化查询。这在您传递字符串时变得更有价值,因为这避免了 SQL 注入。
library(RODBCext)
sqlExecute(dbhandle,
"select attr from myTable where cond = ?",
data = list(cond = 10),
fetch = TRUE,
stringsAsFactors = FALSE)
【讨论】:
【参考方案3】:我喜欢这些东西的glue
包,虽然它和paste
完全一样,只是更漂亮:
library(glue)
func <- function(x)
sqlQuery(dbhandle, glue('select attr from myTable where cond = x'))
【讨论】:
【参考方案4】:在这个简单的例子中,您甚至可以使用 dplyr
本身:
library(dplyr)
func <- function(x)
tbl(dbhandle, "myTable") %>%
select(attr) %>%
filter(cond == x) %>%
collect()
【讨论】:
以上是关于如何在R中的sql查询中传递函数参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章