如果行存在,如何更新字段,否则插入行?

How do I update a field, if row exists, otherwise insert row?

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

k    c1    c2
0     1  null
1  null     1

假设我 运行 计算给出了对 (k, c1) 的列表。我想按如下方式将这些对推送到我的数据库中:

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

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

table.insert_many(rows)

?

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

取决于您的数据库,但它们中的大多数(包括最新版本的 sqlite)在冲突更新时支持某种风格的更新插入/插入。

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

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