這些是 dplyr rows_insert()
、 rows_append()
、 rows_update()
、 rows_patch()
、 rows_upsert()
和 rows_delete()
泛型的方法。
當 in_place = TRUE
時,這些動詞不會生成 SELECT
查詢,而是使用 INSERT
、 UPDATE
或 DELETE
運算符直接修改底層數據。這將要求您具有對數據庫的寫訪問權限:連接需要插入、修改或刪除行的權限,但不能更改表的結構。
默認值 in_place = FALSE
生成等效的惰性表(使用 SELECT
查詢),允許預覽結果,而無需實際修改數據庫上的基礎表。
用法
# S3 method for tbl_lazy
rows_insert(
x,
y,
by = NULL,
...,
conflict = c("error", "ignore"),
copy = FALSE,
in_place = FALSE,
returning = NULL,
method = NULL
)
# S3 method for tbl_lazy
rows_append(x, y, ..., copy = FALSE, in_place = FALSE, returning = NULL)
# S3 method for tbl_lazy
rows_update(
x,
y,
by = NULL,
...,
unmatched = c("error", "ignore"),
copy = FALSE,
in_place = FALSE,
returning = NULL
)
# S3 method for tbl_lazy
rows_patch(
x,
y,
by = NULL,
...,
unmatched = c("error", "ignore"),
copy = FALSE,
in_place = FALSE,
returning = NULL
)
# S3 method for tbl_lazy
rows_upsert(
x,
y,
by = NULL,
...,
copy = FALSE,
in_place = FALSE,
returning = NULL,
method = NULL
)
# S3 method for tbl_lazy
rows_delete(
x,
y,
by = NULL,
...,
unmatched = c("error", "ignore"),
copy = FALSE,
in_place = FALSE,
returning = NULL
)
參數
- x
-
一張懶人的表格。對於
in_place = TRUE
,這必須是用tbl()
或compute()
實例化的表,而不是惰性查詢。remote_name()
函數用於確定要更新的表的名稱。 - y
-
惰性表、 DataFrame 或 DataFrame 擴展(例如 tibble)。
- by
-
給出關鍵列的未命名字符向量。鍵列必須同時存在於
x
和y
中。鍵通常唯一標識每一行,但這僅在使用rows_update()
、rows_patch()
或rows_upsert()
時對y
的鍵值強製執行。默認情況下,我們使用
y
中的第一列,因為第一列是放置標識符變量的合理位置。 - ...
-
傳遞給方法的其他參數。
- conflict
-
對於
rows_insert()
,y
中的鍵與x
中的鍵衝突應該如何處理?如果y
中的鍵已存在於x
中,則會發生衝突。之一:
-
數據庫表不支持默認值
"error"
。要獲得相同的行為,請在by
列上添加唯一索引並使用rows_append()
。 -
"ignore"
將忽略y
中與x
中的鍵衝突的行。
-
- copy
-
如果
x
和y
不是來自同一個數據源,並且copy
是TRUE
,則y
將被複製到與x
相同的源中。這允許您跨 src 連接表,但這是一項潛在昂貴的操作,因此您必須選擇它。 - in_place
-
是否應該就地修改
x
?如果FALSE
將生成返回修改後的表的SELECT
查詢;如果TRUE
將使用 DML 操作修改基礎表(INSERT
、UPDATE
、DELETE
或類似操作)。 - returning
-
要返回的列。有關詳細信息,請參閱
get_returned_rows()
。 - method
-
指定要使用的方法的字符串。這僅與
in_place = TRUE
相關。 - unmatched
-
對於
rows_update()
、rows_patch()
和rows_delete()
,應如何處理y
中與x
中的鍵不匹配的鍵?之一:
-
數據庫表不支持默認值
"error"
。在y
的by
列上添加外鍵約束,讓數據庫為您檢查此行為。 -
"ignore"
將忽略y
中的行,這些行的鍵與x
中的鍵不匹配。
-
值
修改數據的新tbl_lazy
。使用 in_place = FALSE
,結果是一個可見打印的惰性查詢,因為此操作的目的是預覽結果。對於 in_place = TRUE
, x
會被無形地返回,因為此操作的目的是修改 x
後麵表中的行的副作用。
例子
library(dplyr)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
DBI::dbExecute(con, "CREATE TABLE Ponies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
cutie_mark TEXT
)")
#> [1] 0
ponies <- tbl(con, "Ponies")
applejack <- copy_inline(con, data.frame(
name = "Apple Jack",
cutie_mark = "three apples"
))
# The default behavior is to generate a SELECT query
rows_insert(ponies, applejack, conflict = "ignore")
#> Matching, by = "name"
#> # Source: SQL [1 x 3]
#> # Database: sqlite 3.41.2 [:memory:]
#> id name cutie_mark
#> <lgl> <chr> <chr>
#> 1 NA Apple Jack three apples
# And the original table is left unchanged:
ponies
#> # Source: table<Ponies> [0 x 3]
#> # Database: sqlite 3.41.2 [:memory:]
#> # ℹ 3 variables: id <int>, name <chr>, cutie_mark <chr>
# You can also choose to modify the table with in_place = TRUE:
rows_insert(ponies, applejack, conflict = "ignore", in_place = TRUE)
#> Matching, by = "name"
# In this case `rows_insert()` returns nothing and the underlying
# data is modified
ponies
#> # Source: table<Ponies> [1 x 3]
#> # Database: sqlite 3.41.2 [:memory:]
#> id name cutie_mark
#> <int> <chr> <chr>
#> 1 1 Apple Jack three apples
相關用法
- R dbplyr replace_na.tbl_lazy 將 NA 替換為指定值
- R dbplyr remote_name 有關遠程表的元數據
- R dbplyr backend-teradata 後端:Teradata
- R dbplyr escape 轉義/引用字符串。
- R dbplyr expand.tbl_lazy 擴展 SQL 表以包含所有可能的值組合
- R dbplyr distinct.tbl_lazy 子集不同/唯一行
- R dbplyr backend-sqlite 後端:SQLite
- R dbplyr pivot_wider.tbl_lazy 將數據從長軸轉向寬軸
- R dbplyr build_sql 構建 SQL 字符串。
- R dbplyr mutate.tbl_lazy 創建、修改和刪除列
- R dbplyr collapse.tbl_sql 計算查詢的結果
- R dbplyr sql_expr 從 R 表達式生成 SQL
- R dbplyr get_returned_rows 提取並檢查返回的行
- R dbplyr dbplyr_uncount “計數”數據庫表
- R dbplyr count.tbl_lazy 按組計數觀察值
- R dbplyr backend-odbc 後端:ODBC
- R dbplyr head.tbl_lazy 對第一行進行子集化
- R dbplyr db-quote SQL 轉義/引用泛型
- R dbplyr copy_inline 在 dbplyr 查詢中使用本地 DataFrame
- R dbplyr backend-oracle 後端:甲骨文
- R dbplyr backend-snowflake 後端:雪花
- R dbplyr lahman 緩存並檢索 Lahman 棒球數據庫的 src_sqlite。
- R dbplyr backend-redshift 後端:紅移
- R dbplyr partial_eval 部分評估表達式。
- R dbplyr group_by.tbl_lazy 按一個或多個變量分組
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Edit individual rows in the underlying database table。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。