Python 为什么PostgreSQL抱怨这个UPDATE语句的语法?

Python 为什么PostgreSQL抱怨这个UPDATE语句的语法?,python,sql,postgresql,Python,Sql,Postgresql,我有一个Python函数,它可以使用一个字典,并在SQL中更新一行的多个字段(给定主键) 我这样称呼它: sqlite_update(CURSOR, 'students', {'last_name' : "gamgee"}, "student_id", "5") 以下生成的SQL语句报告了无效语法: UPDATE students SET last_name=? WHERE student_id=? ['gamgee', '5']

我有一个Python函数,它可以使用一个字典,并在SQL中更新一行的多个字段(给定主键)

我这样称呼它:

sqlite_update(CURSOR, 'students', {'last_name' : "gamgee"}, "student_id", "5")
以下生成的SQL语句报告了无效语法:

UPDATE students SET last_name=? WHERE student_id=? ['gamgee', '5']

syntax error at or near "=?"

这个语句在SQLite中运行得非常好,为什么PostgreSQL会抱怨?用数组中的语句替换是否不够聪明?如果没有,那么我如何才能做到这一点?

您是否正在尝试编写:

UPDATE students
    SET last_name = ?
    WHERE student_id = ANY (ARRAY['gamgee', '5']);

是一个Dfiddle,它说明了语法的工作原理。

您希望查询做什么?您没有指定您正在使用的驱动程序,但它可能使用“%s”而不是“?”?@GordonLinoff我想要?最后由数组中的值填充(在适当的位置),这非常简单convenient@snakecharmerb我使用的是psycopg2,但当我在Navicat查询编辑器中执行它时,该语句也不会执行。我看不到该语句
updatestudents SET last_name=?其中student_id=?[gamgee',5']
sqlite3中工作。您对sqlite3使用的驱动程序是什么?您在哪里找到该语句?在
psycopg2
案例中,您需要使用
%s
作为占位符(
%(name)s
用于命名参数)。有关更多信息,请参阅。该语句似乎也会产生语法错误链接的dbfiddle中的语句与注释中的语句不同,这会在“WHERE”@Fleckenator之前产生语法错误。第一个
是值的参数占位符。我想如果您使用的是
,并且在SQLite中使用了参数,您应该知道如何处理这个问题。事实上,
是一个值的占位符,但是我不理解为什么PostgreSQL不接受它作为一个值的占位符value@Fleckenator . . . 是的()。还可以使用命名参数。
UPDATE students
    SET last_name = ?
    WHERE student_id = ANY (ARRAY['gamgee', '5']);