我已經為此作業了幾個小時,但找不到有效的解決方案。為簡單起見,我們假設設定是我們在 R 中有一個 DataFrame,我們稱它為 df,只有一列值,假設它的值為 1、2、3、4 和 5。
我想在 R 中嵌入以下查詢:
SELECT DISTINCT column1,
column 2
FROM database
WHERE value IN (1,2,3,4,5)
如果我通過以下方式將查詢嵌入到 R 中
df5 <- dbGetQuery(db,paste0("
SELECT DISTINCT column1,
column 2
FROM database
WHERE value IN (1,2,3,4,5)"))
然后我的查詢有效,但我想參考我從 Excel 檔案中提取的這個 DataFrame。自然的做法是將其轉換為串列
val_list=list(df$'values')
并執行以下操作
df5 <- dbGetQuery(db,paste0("
SELECT DISTINCT column1,
column 2
FROM database
WHERE value IN '",vals,"))
然而,這是行不通的。我怎樣才能讓它按照我的意愿作業?
uj5u.com熱心網友回復:
永遠不要將資料直接插入到查詢中,以免發生意外的 sql 注入(或查詢中毒)。最好使用系結引數或類似引數,請參閱https://db.rstudio.com/best-practices/run-queries-safely/。
對于此代碼,假設您有一組要檢查IN集合成員資格的值:
#?# vec <- df$values
qmarks <- paste(rep("?", length(vec)), collapse = ",")
df5 <- dbGetQuery(db, paste("
SELECT DISTINCT column1, column 2
FROM database
WHERE value IN (", qmarks, ")"),
params = as.list(vec))
uj5u.com熱心網友回復:
假設我們希望將內置資料框 BOD 中的時間列插入到 sql 查詢中。
sprintf("select * from X where Y in (%s)", toString(BOD$Time))
## [1] "select * from X where Y in (1, 2, 3, 4, 5, 7)"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403166.html
標籤:
