【发布时间】:2015-03-23 16:12:32
【问题描述】:
我想知道为什么至少在使用 Peewee 时,当条目已经在表中时,UPSERT 会执行 DELETE 和 INSERT 而不是 UPDATE?
有什么理由比“删除然后插入”而不是“尝试更新,否则插入”更可取?
UPDATE 是否比 DELETE & INSERT 更耗时?还是 UPSERT 真的是一个 INSERT(force=True) 查询?
【问题讨论】:
-
我不认为 SQLite 支持 UPSERT.. 没有关于它的文档:sqlite.org/docs.html
-
我的错。显然该层是由 Peewee 处理的。 Juste编辑了这个问题。但是,从我读过的内容来看,这似乎是一个常见的实现。
-
可能是更新中的数据占用空间较大,无法就地更新。
-
@BeNdErR,SQLite 通过
INSERT OR REPLACE INTO支持UPSERT。 @bsuire,peewee 不会“伪造”一个 upsert。如果数据库支持,则会发出原生 upsert,否则会收到错误消息。