【发布时间】:2021-03-22 13:10:20
【问题描述】:
我有一个 Python 函数,它可以接受一个字典,并在 SQL 中更新一行的多个字段(给定一个主键)。
def sql_update(conn, table, data, pkeyname, pkeyval):
query = f"UPDATE {table} SET " + ', '.join(
"{}=?".format(k) for k in data.keys()) + f" WHERE {pkeyname}=?"
conn.execute(query, list(data.values()) + [pkeyval])
我这样称呼它:
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 会抱怨?用我的数组中的语句替换它还不够聪明吗?如果没有,那我该如何实现呢?
【问题讨论】:
-
你想让查询做什么?
-
您没有指定您正在使用哪个驱动程序,但它可能使用“%s”而不是“?” ?
-
@GordonLinoff 我想要 ?最后用数组中的值填充(就地),很方便
-
@snakecharmerb 我正在使用 psycopg2,但是当我在我的 Navicat 查询编辑器中执行此语句时,它也不会执行
-
我也没有在
sqlite3中看到这个声明UPDATE students SET last_name=? WHERE student_id=? ['gamgee', '5']。sqlite3使用什么驱动程序,您在哪里找到该语句?在psycopg2的情况下,您需要使用%s作为占位符(%(name)s用于命名参数)。如需更多信息,请参阅Parameters。
标签: python sql postgresql