INSERT UPDATE conditionnels.

Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 9 mars 2020 à 12:16
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 10 mars 2020 à 08:46
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
A voir également:

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 9 mars 2020 à 15:30
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
1
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
10 mars 2020 à 07:20
Merci .
Je vais faire des tests.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 mars 2020 à 08:46
Tu peux aussi faire, sur le modèle que tu suggérais,
IF EXISTS (SELECT...) THEN UPDATE... ELSE INSERT...
0