在 R 中执行 SQL 脚本时如何使用动态值
How to use dynamic values while executing SQL scripts in R
我的 R 工作流程现在涉及处理大量查询(RPostgreSQL
库)。以后很想把代码做到易维护易管理
我开始从单独的 .SQL
文件加载大型查询(this 帮助)并且效果很好。
然后我开始使用内插值(that 帮助)这意味着我可以写
SELECT * FROM table WHERE value = ?my_value;
和(将其加载到 R 中后)使用 sqlInterpolate(ANSI(), query, value = "Whosebug")
.
对其进行插值
现在我想使用这样的东西
SELECT count(*) FROM ?my_table;
但是我怎样才能让它发挥作用呢? sqlInterpolate()
默认情况下仅安全插值。有解决方法吗?
谢谢
sqlInterpolate()
仅用于替换值,而不是 table 名称等其他组件。您可以使用其他模板框架,例如 brew or whisker.
在?DBI::SQL
中,您可以阅读:
By default, any user supplied input to a query should be escaped using
either dbQuoteIdentifier()
or dbQuoteString()
depending on whether it
refers to a table or variable name, or is a literal string.
此外,在 this page 上:
You may also need dbQuoteIdentifier()
if you are creating tables or
relying on user input to choose which column to filter on.
所以你可以使用:
sqlInterpolate(ANSI(),
"SELECT count(*) FROM ?my_table",
my_table = dbQuoteIdentifier(ANSI(), "table_name"))
# <SQL> SELECT count(*) FROM "table_name"
我的 R 工作流程现在涉及处理大量查询(RPostgreSQL
库)。以后很想把代码做到易维护易管理
我开始从单独的 .SQL
文件加载大型查询(this 帮助)并且效果很好。
然后我开始使用内插值(that 帮助)这意味着我可以写
SELECT * FROM table WHERE value = ?my_value;
和(将其加载到 R 中后)使用 sqlInterpolate(ANSI(), query, value = "Whosebug")
.
现在我想使用这样的东西
SELECT count(*) FROM ?my_table;
但是我怎样才能让它发挥作用呢? sqlInterpolate()
默认情况下仅安全插值。有解决方法吗?
谢谢
sqlInterpolate()
仅用于替换值,而不是 table 名称等其他组件。您可以使用其他模板框架,例如 brew or whisker.
在?DBI::SQL
中,您可以阅读:
By default, any user supplied input to a query should be escaped using either
dbQuoteIdentifier()
ordbQuoteString()
depending on whether it refers to a table or variable name, or is a literal string.
此外,在 this page 上:
You may also need
dbQuoteIdentifier()
if you are creating tables or relying on user input to choose which column to filter on.
所以你可以使用:
sqlInterpolate(ANSI(),
"SELECT count(*) FROM ?my_table",
my_table = dbQuoteIdentifier(ANSI(), "table_name"))
# <SQL> SELECT count(*) FROM "table_name"