正确的方式传递参数在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