INSERT UPDATE conditionnels.

pcsystemd Messages postés 734 Statut Membre -  
Reivax962 Messages postés 3742 Statut Membre -
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

--
L'accès au savoir est la première liberté que chaque homme devrait avoir.

2 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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
  2. pcsystemd Messages postés 734 Statut Membre 23
     
    Merci .
    Je vais faire des tests.
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Tu peux aussi faire, sur le modèle que tu suggérais,
      IF EXISTS (SELECT...) THEN UPDATE... ELSE INSERT...
      0