INSERT, DELETE, UPDATE avec valeur de retour

La clause SQL RETURNING à la fin d'une instruction INSERT, UPDATE ou DELETE, permet de retourner un résultat de requête (qui peut être lors traité comme le résultat d'un SELECT).

Syntaxe

1
sql = "INSERT INTO t (a, b, c) VALUES (1, 2, 3) RETURNING a"
2
cur.execute(sql)
3
res = cur.fetchone()[0]

Exemple

1
#!/usr/bin/python3
2
3
import psycopg2
4
5
conn = psycopg2.connect("host='localhost' dbname='mydb' user='me' password='secret'")
6
cur = conn.cursor()
7
8
try:
9
  sql = "INSERT INTO philosopher VALUES ('Aristote', NULL, -4) RETURNING surname"
10
  cur.execute(sql)
11
  res = cur.fetchone()[0]
12
  print(res)
13
  conn.commit()
14
except psycopg2.IntegrityError as e:
15
  conn.rollback()
16
  print("Message système :", e)
17
18
conn.close()

Méthode

Cette fonction est très utile pour récupérer la valeur d'une clé artificielle générée automatiquement (par une séquence typiquement).