如何在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查询中传递函数参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 在 SQL 查询中执行参数替换? [复制]

Promise:如何传递带参数的函数? [复制]

按值或 C++11 通用参考传递函子? [复制]

如何在 AWS API Gateway GET 请求中传递查询参数? [复制]

如何将函数作为参数传递,带参数? [复制]

给定传递给它的参数类型,如何确定函数参数的类型?