将新数据附加到 R 中的 sqlite 数据库

Appending new data to sqlite db in R

我使用以下代码在 R 的 sqlite3 数据库中创建了一个 table:-

con <- DBI::dbConnect(drv = RSQLite::SQLite(),
                      dbname="data/compfleet.db")
s<- sprintf("create table %s(%s, primary key(%s))", "PositionList",
                             paste(names(FinalTable), collapse = ", "),
                             names(FinalTable)[2])
dbGetQuery(con, s)

dbDisconnect(con)

table 的第二列是 UID,这是主键。然后我 运行 一个脚本来更新 table 中的数据。更新后的数据可能包含 table 中已存在的相同 UID。我不希望更新这些现有记录,只希望将新记录(具有新的 UID 值)附加到该数据库。我使用的代码是:-

DBI::dbWriteTable(con, "PositionList", FinalTable, append=TRUE, row.names=FALSE, overwite=FALSE)

其中returns一个错误:

Error in result_bind(res@ptr, params) : 
  UNIQUE constraint failed: PositionList.UID

如何在不更改现有 UID 值的情况下仅附加新的 UID 值,即使它们出现在我的 运行 我的更新脚本中?

当您要插入数据时,首先使用 UID.If 从数据库中获取数据 数据已存在 无需执行其他操作,使用新 UID.Duplicate 主键 (UID) 记录插入新数据不存在,所以显示错误。

您可以查询现有的 UID(作为单列数据框)并从要插入的 table 中删除相应的行。

uid_df <- dbGetQuery(con, "SELECT UID FROM PositionList")
dbWriteTable(con, "PositionList", FinalTable[!(FinalTable$UID %in% uid_df[[1]]), ], ...)