R - 使用 RODBC 库连接字符串和变量

Posted

技术标签:

【中文标题】R - 使用 RODBC 库连接字符串和变量【英文标题】:R - Concatenation of string and varaable using the RODBC library 【发布时间】:2018-02-20 15:56:44 【问题描述】:

我想使用 RODBC 库通过 RStudio 运行一些查询。通常,这样的代码可以正常工作:

query_6 <- sqlQuery(con, "Select * from my_table where condition = more_than_sth")

我更喜欢有一些变量,这些变量将由我之前定义并留给more_than_sth。让我们说它是x。有什么方法可以使我能够将此变量放入查询字符串中?我应该使用某种粘贴,也许是之前,还是直接放入?

问候, 拉法尔

【问题讨论】:

如果您必须使用RODBC,请使用RODBCext 使用参数化查询,已在***.com/questions/16178640/… 中讨论过。建议的替代方案包括基于odbcDBI 的本机驱动程序。 【参考方案1】:

R 中的连接函数是paste,它会自动在每个对象之间附加一个空格,您可以使用paste(..., sep = "")paste0() 删除它们。

more_than_sth <- "x"
query_6 <- sqlQuery(con, paste0("Select * from my_table where condition ='", more_than_sth, "'"))

【讨论】:

不,这不是正确/最佳/建议(或对我来说,可以容忍)的方法。 SQL injection,无论是有意还是无意(引用)。 (顺便说一句:许多(大多数?不确定)SQL 语言在字符串文字周围需要单引号,而不是双引号。)另外,请考虑more_than_sth &lt;- 'foo"' 同意简单报价。但是,当您从 RStudio 运行查询时,为什么还要关心 SQL 注入呢? 不可否认,主要是为了破坏而不是安全,但也许是因为在过去的几十年里,有许多代码以非最初预期的方式和位置使用的例子。您可以手动完成这些步骤以充分防止单引号、双引号甚至反斜杠,或者您可以通过从一开始就告诉 SQL 值是“始终是数据,无论它看起来如何”,并且永远不会被解释为可能的代码。 当我进行快速搜索时,我承认我经常在查询中使用单引号文字。但是,在我采用参数化作为默认操作之前,我必须解决许多由于引用或其他原因导致搜索字符串损坏的问题。最初我提防双引号。然后单引号。然后我被反斜杠咬了。使用参数没有什么不好(对我来说);许多错误是由于选择不使用它们而引起的。 (&lt;/deadhorse&gt;) SE 网站上的问题正在寻找明智/明智的建议。这种技术非常有见地。

以上是关于R - 使用 RODBC 库连接字符串和变量的主要内容,如果未能解决你的问题,请参考以下文章

R RDB 使用 RODBC 连接查询日期

RODBC 连接无效

与 Oracle 数据库的 RODBC 连接不起作用,崩溃 R

R语言RODBC数据库操作

RODBC - 连接字符串添加用户名和密码

SQL Server 2014 RODBC 连接