正确的方式传递参数在R DBI中查询

在perl / python DBI API中有一种机制可以安全地将参数插入sql查询中。 例如在Python中,我会这样做:

cursor.execute("SELECT * FROM table WHERE value > ?", (5,))    

其中execute方法的第二个参数是要添加到sql查询中的参数元组

R的符合DBI的API有没有类似的机制? 我见过的例子从不显示传递给查询的参数。 如果不是,在参数中插入查询的最安全方法是什么? 我特别关注使用RPostgresSQL。


为了完整起见,我会根据哈德利的评论添加一个答案。 DBI包现在具有函数sqlInterpolate ,它也可以执行此操作。 它需要在sql查询中命名的函数参数列表,所有函数参数都必须以? 。 摘自下面的DBI手册

sql <- "SELECT * FROM X WHERE name = ?name"
sqlInterpolate(ANSI(), sql, name = "Hadley")
# This is safe because the single quote has been double escaped
sqlInterpolate(ANSI(), sql, name = "H'); DROP TABLE--;")

事实上,绑定变量的使用并没有很好的记录。 无论如何,R中的ODBC命令对于不同的数据库工作方式不同。 postgres一种可能性是这样的:

res <- postgresqlExecStatement(con, "SELECT * FROM table WHERE value > $1", c(5))
postgresqlFetch(res)
postgresqlCloseResult(res)

希望能帮助到你。

链接地址: http://www.djcxy.com/p/91559.html

上一篇: Proper way to pass parameters to query in R DBI

下一篇: Java tomcat embedded with Jersey File Upload