多个参数 psycopg2 where 子句 - 语法错误

Posted

技术标签:

【中文标题】多个参数 psycopg2 where 子句 - 语法错误【英文标题】:Multiple parameters psycopg2 where clause - Syntax error 【发布时间】:2017-05-26 10:23:25 【问题描述】:

我在下面最后一个查询中的 WHERE 子句处或附近遇到语法错误。

只有一个参数的查询可以正常工作,所以我猜这个错误与我试图传递两个参数的事实有关。

提前致谢。

cur.execute('''SELECT street_name, id FROM tablename 
            WHERE (((suburb = '') IS NOT FALSE) 
            AND ((street_name2 = '') IS NOT FALSE));''')

datesfrompdf = cur.fetchall()
for rowdate, rowid in datesfrompdf:
    cur.execute("DELETE FROM tablename WHERE id = %s;", (rowid + 1,)  #this works fine

    cur.execute('''INSERT INTO tablename (got_date)
                VALUES (%s) WHERE ((suburb IS NOT NULL)     #syntax error here
                AND (street_name2 IS NOT NULL)
                AND (id > %s));''', (rowdate, rowid))

运行 psql 9.3.14、python 2.7

【问题讨论】:

【参考方案1】:

您不能将 WHERE 子句放入 INSERT 语句 - insert 插入新行。您可能正在寻找UPDATE 声明。

我只能猜测,但你可能想要这样的东西:

UPDATE tablename 
    SET got_date = (%s)
    WHERE ((suburb IS NOT NULL)
        AND (street_name2 IS NOT NULL)
        AND (id > %s));

【讨论】:

应该从文档中获取。谢谢老兄。

以上是关于多个参数 psycopg2 where 子句 - 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

TypeORM查找where子句,如何在多个参数中添加where

如何仅使用在不使用动态SQL的情况下检查的复选框,将WHERE子句设置为在多个位列上进行过滤?

Laravel 6:如何将多个 where 子句添加到关系中

我可以将报告参数用作 WHERE 子句的一部分吗

在 where 子句 SQL 中的 case 语句中使用参数

用于返回结果集的 where 子句中的 case 语句包含空值