如何使用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')")
可以通过调用存储过程替换 select id from volume where volume.name='bar'
:
lookup_vol_id('bar')
由于
答案 0 :(得分:0)
您可以使用INSERT...SELECT
INSERT
形式,例如:
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 字符串可以传递到cursor.execute
(不带分号)。
顺便说一句,看起来volume
列可能会重命名为volume_id
,因为它是id
表中的volume
列。< / p>
答案 1 :(得分:0)
我现在无法测试它,但我希望这样的东西可以工作:
cursor.execute("INSERT INTO file (name, volume) "
" VALUES (%s, "
" (SELECT id FROM volume WHERE volume.name = %s))",
"foo", "bar")