簡體   English   中英

psycopg2 execute_values DELETE 語句返回語法錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM