首页 > 解决方案 > 如果行存在,如何更新字段,否则插入行?

问题描述

假设我的数据库中有以下数据:

k    c1    c2
0     1  null
1  null     1

假设我运行了一个计算,它给了我一个对 (k, c1) 的列表。我想将这些对推送到我的数据库中,如下所示:

  1. 如果 k 存在于我的表中,则更新 c1(保持 c2 不变)
  2. 如果我的表中不存在 k,请添加一个新行,并将 c2 设置为 null(或该列的默认值)

有没有办法在一次操作中做到这一点,类似于

table.insert_many(rows)

?

table.inser_many 对我不起作用,因为即使 c2 曾经有一个值,它也会强制 c2 为空。

标签: peewee

解决方案


取决于您的数据库,但它们中的大多数(包括最新版本的 sqlite)都支持冲突更新时的一些 upsert / insert 风格。

http://docs.peewee-orm.com/en/latest/peewee/querying.html#upsert

有关具体实现的详细信息,请查阅您的数据库文档。


推荐阅读