正如此处所指出的,可以使用 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 版,他们从 SELECT方法中引入了 INSERT,理论上应该可以处理上述问题。
有可能吗?如果可以,怎么办?(因为我想利用使用原始 sql 时未返回的 result.inserted_primary_key)
我如何将 bindparams 用于“from_select”部分,因为我似乎可以使用它的唯一方法是在选择中使用表列时。
例如
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'