Postgresql 如何使用psycopg2将过程作为SQL语句的一部分调用

Postgresql 如何使用psycopg2将过程作为SQL语句的一部分调用,postgresql,psycopg2,Postgresql,Psycopg2,如何使用psycopg2执行以下插入 INSERT INTO file (name, volume) VALUES ('foo', (select id from volume where volume.name='bar')); 这当然行不通: cursor.execute("INSERT INTO file (name,volume) VALUES (%s,%s)","foo","(select id from volume where volume.name='bar')") 从卷中

如何使用psycopg2执行以下插入

INSERT INTO file (name, volume) 
VALUES ('foo', (select id from volume where volume.name='bar'));
这当然行不通:

cursor.execute("INSERT INTO file (name,volume) VALUES (%s,%s)","foo","(select id from volume where volume.name='bar')")
从卷中选择id,其中volume.name='bar'
可以由对存储过程的调用替换:

lookup_vol_id('bar')

谢谢

您可以使用
插入…选择
插入的
形式,例如:

INSERT INTO file (name,volume)
SELECT 'foo', (select id from volume where volume.name='bar');
或者,如果
name
column
是该表中唯一的列,则可以按照该顺序完全省略列名:

INSERT INTO file
SELECT 'foo', (select id from volume where volume.name='bar');
可以将任一SQL字符串传递到
游标中。执行
(不带分号)


另一方面,看起来应该将
volume
列重命名为
volume\u id
,因为它是
volume
表中的
id
列。

我现在无法测试它,但我希望类似的东西可以工作:

cursor.execute("INSERT INTO file (name, volume) "
               " VALUES (%s, "
               "   (SELECT id FROM volume WHERE volume.name = %s))",
               "foo", "bar")