[英]psycopg2 execute_values DELETE statement returning syntax error
我正在使用 execute_values 執行一系列 psycopg2。 它適用於 UPDATE 和 INSERT 語句,但不適用於 DELETE 語句。
例如,當我運行時:
execute_values(db, "DELETE FROM table1 WHERE column1 = %s", [(1,), (2,), (3,)])
我得到:
psycopg2.errors.SyntaxError: syntax error at or near ","
LINE 1: DELETE FROM table1 WHERE column1 = (1),(2),(3)
^
但是,當我使用類似的代碼運行 UPDATE 或 INSERT 時,它工作正常,例如:
execute_values(db, "INSERT INTO table1 (column1, column2, column3) VALUES %s",
[(1, foo, bar), (2, foo, bar), (3, foo, bar)])
文檔暗示 execute_values 應該可以與 DELETE 語句一起正常工作,但不要明確說明。 但是,我不明白為什么我只在使用 DELETE 語句時收到此錯誤。
如何使它工作的一個例子:
select * from animals ;
id | cond | animal
-----+-------+--------
30 | false | false
50 | false | false
16 | false | false
60 | false | false
200 | false | false
1 | false | false
import psycopg2
from psycopg2.extras import execute_values
con = psycopg2.connect(dbname="test", host='localhost', user='postgres')
cur = con.cursor()
delete_sql = "delete from animals where id in (%s)"
id_vals = [(30,), (50,), (60,)]
execute_values(cur, delete_sql, id_vals)
--Query as it reached database
delete from animals where id in ((30),(50),(60))
con.commit()
select * from animals ;
id | cond | animal
-----+-------+--------
16 | false | false
200 | false | false
1 | false | false
根據我的評論DELETE
需要使用IN
對多個值進行操作,該IN
指向您使用元組列表構造的VALUES
列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.