我有一个包含2个这样的表的数据库:
cg_resp
id | name | email
1 | George | george@yahoo.com
id
列为primary_key
,autoincremented
且name
为unique
和
equip_info
id | description | cg_resp_id
1 | Caliper | 1
在申请表中,我有2个名为edit_resp_name
和edit_resp_email
如果用户使用电子邮件John
插入新的负责人名称,例如john@yahoo.com
,则在保存表单期间,我希望insert
新的cg_resp
表格负责人,获取最后插入的id
并将其更新为equip_info.cg_resp_id
。
如果用户保留了名称George
,但它正在更新george01@gmail.com
之类的电子邮件,那么我希望update
来自id
的{{1}} = 1新电子邮件地址及其余部分(cg_resp
和equip_info.cg_resp_id
)保持不变。
如果负责人的姓名相同,我想保留表cg_resp.id
中cg_resp_id
的原始引用,因此有必要避免删除等情况并插入新的情况。
如何在一个Sqlite sql序列中完成此操作?
答案 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:当名称不存在时插入新行或以其他方式更新。