如何在R中执行SQL脚本时使用动态值
问题描述:
我的R工作流现在涉及处理大量查询(RPostgreSQL
库)。我确实希望将代码轻松地在将来进行维护和管理。如何在R中执行SQL脚本时使用动态值
我开始从单独的.SQL
文件(this帮助)加载大型查询,它工作得很好。
然后我开始使用内插的值(that帮助),这意味着我可以写
SELECT * FROM table WHERE value = ?my_value;
和(装载它成R之后)使用sqlInterpolate(ANSI(), query, value = "stackoverflow")
插值它。
现在会发生什么事是我想用这样的
SELECT count(*) FROM ?my_table;
,但我怎样才能使它发挥作用?默认情况下,sqlInterpolate()
只能安全插值。有没有解决方法?
感谢
答
在?DBI::SQL
,你可以阅读:
默认情况下,任何用户提供的输入到查询应使用 要么
dbQuoteIdentifier()
或dbQuoteString()
取决于它 是否指的是表或变量名进行转义,或是一个文字字符串。
此外,在this page:
您可能还需要
dbQuoteIdentifier()
如果要创建表或 依赖于用户输入选择要过滤的哪一列。
所以,你可以使用:
sqlInterpolate(ANSI(),
"SELECT count(*) FROM ?my_table",
my_table = dbQuoteIdentifier(ANSI(), "table_name"))
# <SQL> SELECT count(*) FROM "table_name"