INSERT UPDATE conditionnels.

Signaler
Messages postés
571
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
5 août 2020
-
Messages postés
3608
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 août 2020
-
Bonjour,

Je souhaiterais via u script python pouvoir via une requête SELECT faire soit un INSERT pour chaque résultat de mon SELECT soit un UPDATE si l'entrée existe en BDD.

Je ne sais pas si avec un IF FOUND then INSERT.. ELSE UPDATE.. cela pourrait fonctionner!

Connaissez vous d'autres solutions?

Merci

2 réponses

Messages postés
3608
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 août 2020
962
Bonjour,

On peut tenter un UPDATE, vérifier le nombre de lignes affectées, et si c'est 0 faire l'INSERT.

En une seule requête, on peut faire INSERT ... ON CONFLICT UPDATE (https://www.postgresql.org/docs/current/sql-insert.html#SQL-ON-CONFLICT) L'idée est la même, mais à l'envers : SQL tente un INSERT, si ça marche pas il fait l'UPDATE. Ce qui signifie que tu dois avoir une clef primaire pour détecter le conflit.

Xavier

Edit : j'ai enlevé l'option MERGE, j'avais mal lu elle n'est pas supportée
Messages postés
571
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
5 août 2020
16
Merci .
Je vais faire des tests.
Messages postés
3608
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 août 2020
962
Tu peux aussi faire, sur le modèle que tu suggérais,
IF EXISTS (SELECT...) THEN UPDATE... ELSE INSERT...