将 R 列表插入到 RPostgreSQL 查询中

Insert R list into RPostgreSQL query

我正在 运行基于存储在 R 列表中的自动 ID 列表执行 postgreSQL 查询。我正在尝试确定如何在我的查询中包含该 R 列表,这样我就不必在每次 运行 我的查询时都对 ID 进行硬编码。

例如,我有一个生成列表的脚本

id <- c("001","002","003")

我的查询看起来像这样:

SELECT *
FROM my_query
WHERE my_query.id_col IN ('001', '002', '003')

我 运行 使用 Rpostgres:

library(Rpostgres)
snappConnection <- DBI::dbConnect(RPostgres::Postgres(),
                                  host = "host",
                                  dbname = "dbname",
                                  user = "user",
                                  password = "pword",
                                  port = 0000)
core.data <- dbGetQuery(conn = snappConnection,statement = SELECT * FROM my_query WHERE my_query.id_col IN ('001', '002', '003'))

有没有办法在我的查询中从 R 引用我的“id”列表,以便当“id”更新为新值时,查询也更新为这些新值?

来自 glue 包的

glue_sql 应该可以工作:

query <- glue::glue_sql("
SELECT *
FROM my_query
WHERE my_query.id_col IN ({id*})              
", .con = snappConnection)

core.data <- dbGetQuery(conn = snappConnection, statement = query)

@dave-edison的回答解决了我的问题。在尝试他的同时,我让它工作了。

我将下面的查询保存为“my_query.sql”

SELECT *
FROM my_query
WHERE my_query.id_col IN ('string_to_replace')

然后创建一个字符串并在该字符串上使用 gsub。

library(tidyverse)
temp.script <-  read_file("my_query.sql")
core.data.script <- gsub('string_to_replace',paste0(id,collapse = "', '"),temp.script)

从那里我只是 运行 我的 RPostgres 脚本,就像上面那样。