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

时间:2015-02-01 09:01:52

标签: sql sqlite

我有一个包含2个这样的表的数据库:

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

id列为primary_keyautoincrementednameunique

equip_info
id  | description  | cg_resp_id 
1   | Caliper      | 1

在申请表中,我有2个名为edit_resp_nameedit_resp_email

的编辑框

如果用户使用电子邮件John插入新的负责人名称,例如john@yahoo.com,则在保存表单期间,我希望insert新的cg_resp表格负责人,获取最后插入的id并将其更新为equip_info.cg_resp_id

如果用户保留了名称George,但它正在更新george01@gmail.com之类的电子邮件,那么我希望update来自id的{​​{1}} = 1新电子邮件地址及其余部分(cg_respequip_info.cg_resp_id)保持不变。

如果负责人的姓名相同,我想保留表cg_resp.idcg_resp_id的原始引用,因此有必要避免删除等情况并插入新的情况。

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

2 个答案:

答案 0 :(得分:3)

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 ...")

答案 1 :(得分:0)

使用符合您需要的INSERT OR REPLACE:当名称不存在时插入新行或以其他方式更新。