簡體   English   中英

如何使用 Postgresql 到 R 中的變量更改 SET 列名稱?

[英]How to change SET column name with variable in Postgresql through R?

我在 Postgresql 中有一個分析表,它由幾列組成,即 unbonding、clogging 和dirty。 此列包含數字。

我想根據用戶選擇的“問題”更新列中的值+1。 例如“堵塞”。

issue="clogging"
currentdata <- dbGetQuery(con,paste0("SELECT DISTINCT *
                                                FROM analytic
                                                ORDER BY analytic.id DESC
                                                FETCH FIRST 1 ROWS ONLY;"))
issueval <- currentdata[[issue]]

sql <- sqlInterpolate(con, 
                      "UPDATE analytic 
                      SET issue = ?val
                      where id = ?code",
                      code = "ID111",
                      val = issueval+1
)
dbSendQuery(con,sql)

如何根據用戶選擇的問題更改SET“列名”

謝謝你

我的答案通常是數據綁定,使用DBI::dbBindDBI::dbGetQuery ::dbGetQuery 的params=參數。 不幸的是,這僅適用於數據,不適用於標識符(例如,列名)。

不過,仍然可以使用sqlInterpolate 嘗試這個:

issue <- "clogging"
sql <- sqlInterpolate(con, 
                      "UPDATE analytic 
                      SET ?col = ?val
                      where id = ?code",
                      col = dbQuoteIdentifier(con, issue),
                      code = "ID111",
                      val = issueval+1)

這樣做的一個風險是命名case :在定義表中的列時,有很多關於區分大小寫的建議,一個常見的建議是始終轉換為小寫。 如果該列實際上是用混合大小寫定義的,那么當您使用dbQuoteIdentifier時,您必須完全正確

如果您遇到此問題並且不想要求用戶始終正確使用,您可以隨時執行以下操作:

realfields <- dbListFields(con, "analytic")
issue <- realfields[ match(tolower(issue), tolower(realfields)) ]
# similarly
issue <- grep(paste0("^", issue, "$"), realfields, value = TRUE, ignore.case = TRUE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM