在R中执行SQL脚本时如何使用动态值

在R中执行SQL脚本时如何使用动态值,r,rpostgresql,r-dbi,R,Rpostgresql,R Dbi,我的R工作流程现在涉及到处理RPostgreSQL库中的许多查询。我真的想让代码在将来易于维护和管理 我开始从单独的.SQL文件加载大型查询,这很有帮助,而且效果很好 然后我开始使用插值,这意味着我可以写 SELECT * FROM table WHERE value = ?my_value; 在将其加载到R之后,使用SQLInterpolateAsi,query,value=stackoverflow对其进行插值 现在发生的是我想用这样的东西 SELECT count(*) FROM ?my

我的R工作流程现在涉及到处理RPostgreSQL库中的许多查询。我真的想让代码在将来易于维护和管理

我开始从单独的.SQL文件加载大型查询,这很有帮助,而且效果很好

然后我开始使用插值,这意味着我可以写

SELECT * FROM table WHERE value = ?my_value;
在将其加载到R之后,使用SQLInterpolateAsi,query,value=stackoverflow对其进行插值

现在发生的是我想用这样的东西

SELECT count(*) FROM ?my_table;
但是我怎样才能让它工作呢?默认情况下,sqlInterpolate仅安全插值。有解决办法吗

感谢

sqlInterpolate仅用于替换值,而不用于替换表名等其他组件。您可以使用其他模板框架,如或。

在?DBI::SQL中,您可以阅读:

默认情况下,任何用户提供的查询输入都应该使用 dbQuoteIdentifier或dbQuoteString取决于 引用表或变量名,或是文字字符串

此外,关于:

如果要创建表或文件,可能还需要dbQuoteIdentifier 依靠用户输入选择要筛选的列

因此,您可以使用:

sqlInterpolate(ANSI(), 
               "SELECT count(*) FROM ?my_table", 
               my_table = dbQuoteIdentifier(ANSI(), "table_name"))
# <SQL> SELECT count(*) FROM "table_name"