Postgresql 如何使用psycopg2将过程作为SQL语句的一部分调用
如何使用psycopg2执行以下插入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')") 从卷中
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")