Comme indiqué ici, il est possible de faire ce qui suit avec postgresql 9.1+
INSERT INTO example_table
(id, name)
SELECT 1, 'John'
WHERE
NOT EXISTS (
SELECT id FROM example_table WHERE id = 1
);
J'ai joué un peu avec la version 0.9 de sqlalchemy où ils ont introduit la méthode INSERT from SELECT qui devrait théoriquement gérer ce qui précède.
Est-ce possible et si oui comment? (car je veux tirer parti du result.inserted_primary_key qui n'est pas retourné lors de l'utilisation du SQL brut)
Comment puis-je utiliser les bindparams pour la partie 'from_select' car la seule façon que je semble pouvoir l'utiliser est lorsque j'utilise les colonnes de table dans le select.
par exemple
insrt = example_table.insert().
from_select(['id', 'name'],
example_table.select().
where(~exists(select([example_table.c.id],
example_table.c.id == 1))))
result = session.execute(insrt)
if result.is_insert:
print 'faire quelque chose avec result.inserted_primary_key'