Sqlite:如果不存在则插入,如果存在则更新
Sqlite: Insert if not exist, Update if exist
我有一个包含 2 个 table 的数据库,如下所示:
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@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_id
和 cg_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 ...")
我有一个包含 2 个 table 的数据库,如下所示:
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@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_id
和 cg_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 ...")