如何解决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 举报,一经查实,本站将立刻删除。