微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

psycopg2 execute_values DELETE 语句返回语法错误

如何解决psycopg2 execute_values DELETE 语句返回语法错误

我正在使用 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",foo,bar),bar)])

docs 暗示 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 对多个值进行操作,该 VALUES 指向您使用元组列表构造的 $url = "https://myAddressHere.co.uk" $output = null; $retval = null; exec("wget --execute robots=off --recursive --no-parent --no-clobber --delete-after --no-check-certificate --no-cache --no-cookies --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/80.0.3987.132 Safari/537.36' --reject jpg,jpeg,png,gif,bmp,svg,pdf,doc ".$url,$output,$retval); echo "Returned with the status ". $retval . "and output:\n"; var_dump($output); 列表。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。