在R中执行SQL脚本时如何使用动态值
我的R工作流程现在涉及到处理RPostgreSQL库中的许多查询。我真的想让代码在将来易于维护和管理 我开始从单独的.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
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"