将 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 脚本,就像上面那样。
我正在 运行基于存储在 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_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 脚本,就像上面那样。