加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用RPostgreSQL参数(插入数据)

发布时间:2020-12-13 16:16:53 所属栏目:百科 来源:网络整理
导读:我正在尝试使用RPostgreSQL将数据插入到预先存在的PostgreSQL表中,我无法弄清楚SQL参数的语法(预处理语句). 例如.假设我想要做以下事情 插入mytable(a,b,c)值($1,$2,$3) 如何指定参数? dbSendQuery似乎不理解你是否只是把参数放在…. 我发现dbWriteTable可
我正在尝试使用RPostgreSQL将数据插入到预先存在的PostgreSQL表中,我无法弄清楚SQL参数的语法(预处理语句).

例如.假设我想要做以下事情

插入mytable(a,b,c)值($1,$2,$3)

如何指定参数? dbSendQuery似乎不理解你是否只是把参数放在….

我发现dbWriteTable可以用来转储整个表,但是不允许你指定列(因此对默认值没有好处等).无论如何,一旦我获得数据,我就需要知道其他查询(所以我认为这不是特定的插入特定)!

当然,我只是遗漏了一些明显的东西……

我也在寻找相同的东西,出于同样的原因,这就是安全性.

显然dplyr软件包具有您感兴趣的容量.它几乎没有记录,但它就在那里.在此插图中向下滚动到“Postgresql”:http://cran.r-project.org/web/packages/dplyr/vignettes/databases.html

总而言之,dplyr提供了函数sql()和escape(),它们可以组合起来生成参数化查询. DBI包中的SQL()函数似乎以完全相同的方式工作.

> sql(paste0('SELECT * FROM blaah WHERE id = ',escape('random "'stuff')))
<SQL> SELECT * FROM blaah WHERE id = 'random "''stuff'

它返回类“sql”和“character”的对象,因此您可以将其传递给tbl()或者也可以传递给dbSendQuery().

escape()函数也正确处理向量,我发现它最有用:

> sql(paste0('SELECT * FROM blaah WHERE id in ',escape(1:5)))
<SQL> SELECT * FROM blaah WHERE id in (1,2,3,4,5)

同样自然也适用于变量:

> tmp <- c("asd",date())
> sql(paste0('SELECT * FROM blaah WHERE id in ',escape(tmp)))
<SQL> SELECT * FROM blaah WHERE id in ('asd','2','Tue Nov 18 15:19:08 2014')

我现在把查询放在一起感觉更安全.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读