Sqlite: Insertar si no existe, actualizar si existe

Tengo una database con 2 tablas como esta:

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

id columna id es primary_key , autoincremented y el name es unique

y

 equip_info id | description | cg_resp_id 1 | Caliper | 1 

En el formulario de request, tengo 2 cuadros de edición llamados edit_resp_name y edit_resp_email

Si el usuario inserta un nuevo nombre responsable como John con el correo electrónico john@yahoo.com , al save el formulario, me gustaría insert un nuevo responsable en la tabla cg_resp , get el último id insertado y actualizarlo a equip_info.cg_resp_id .

Si el usuario mantiene el nombre George pero está actualizando el correo electrónico como george01@gmail.com , me gustaría update el id = 1 de cg_resp con la nueva dirección de correo electrónico y el rest de ellos ( equip_info.cg_resp_id y cg_resp.id ) para permanece igual.

Me gustaría mantener la reference original de cg_resp_id de la tabla equip_info si el nombre del responsable es el mismo, por lo que es necesario evitar situaciones como eliminar e insert una nueva.

¿Cómo se puede hacer esto en una secuencia Sqlite sql?

Use INSERTAR O REEMPLAZAR que hace exactamente lo que quiere: inserte una nueva fila cuando el nombre no exista o actualice de otra manera.

SQLite no tiene un mecanismo incorporado que no elimine la fila existente.

La forma más sencilla de hacer esto es poner la lógica en su aplicación:

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

Si su idioma permite leer el número de filas afectadas, es posible hacer esto con dos commands SQL:

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