正如这里所指出的,在postgresql 9.1+中可以进行以下操作
INSERT INTO example_table
(id, name)
SELECT 1, 'John'
WHERE
NOT EXISTS (
SELECT id FROM example_table WHERE id = 1
);
我一直在尝试使用SQLAlchemy 0.9的版本进行操作,他们引入了INSERT from SELECT 方法,理论上应该可以处理上述问题。如果可能的话,如何实现?(因为我想利用result.inserted_primary_key,而在使用原始SQL时无法返回它)
我如何在“from_select”部分中使用 bindparams,因为似乎只有在选择表列时才能使用它。
例如:
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 'do something with result.inserted_primary_key'