Sqlite:如果不存在则插入,如果存在则更新

Sqlite: Insert if not exist, Update if exist

我有一个包含 2 个 table 的数据库,如下所示:

cg_resp
id  | name   | email
1   | George | george@yahoo.com

id 列是 primary_keyautoincremented 并且 nameunique

equip_info
id  | description  | cg_resp_id 
1   | Caliper      | 1

在申请表中我有 2 个编辑框,分别命名为 edit_resp_nameedit_resp_email

如果用户在电子邮件 john@yahoo.com 中插入一个新的负责人名称,例如 John,那么在保存表格期间,我想 insert 一个新的负责人进入 cg_resp table,获取最后插入的id并更新为equip_info.cg_resp_id.

如果用户保留名称 George 但它正在更新电子邮件 george01@gmail.com 那么我想 update id = 1 来自 cg_resp 使用新的电子邮件地址,其余地址(equip_info.cg_resp_idcg_resp.id)保持不变。

如果负责人的姓名相同,我想保留table对cg_resp_id的原始引用equip_info,因此有必要避免删除和插入这样的情况新的。

如何在一个 Sqlite sql 序列中完成此操作?

使用 INSERT OR REPLACE,它完全符合您的要求:当名称不存在时插入新行,否则更新。

SQLite 没有不会删除现有行的内置机制。

最简单的方法是将逻辑放入您的应用程序中:

cursor = db.execute("SELECT ...")
if cursor.empty:
    db.execute("INSERT ...")
else:
    db.execute("UPDATE ...")

如果您的语言允许读取受影响的行数,则可以使用两个 SQL 命令执行此操作:

db.execute("UPDATE ...")
if db.rowcount == 0:
    db.execute("INSERT ...")