将新数据附加到 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]]), ], ...)
我使用以下代码在 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]]), ], ...)