如何使用字符串(从字典转换而来)更新 PostgreSQL 中的列?

How to update a column in PostgreSQL with a string (converted from dictionary)?

我有一个字符串 obj(obj),它是从字典转换而来的:

obj = '{"a":1, "b":[{"c":2, "d":3}, {"e":5,"f":6}]}'

我想用该字符串更新数据库中的列。我试过了:

Cursor.execute("update table emp set column1 = obj")

但我收到一个错误:

Psycopg2 programming error.

问题是您的 execute() 调用等同于在 PostgreSQL 控制台 (psql) 键入 update table emp set column1 = obj。也就是说,您要告诉 PostgreSQL:对于 emp table 的每一行,用名为 obj.[=24 的列的内容覆盖名为 column1 的列=]

这可能不是您的本意。事实上,您的 emp table 可能甚至没有名为 obj 的列,这就是您收到错误的原因。

你想做的是发出 parameterized query:

Cursor.execute("update table emp set column1 = %(obj)s",
               {'obj': obj})

警告:这会覆盖 table 中每一行的 column1。确保您的 UPDATE 还包括一个 WHERE 子句,如果这是您的意图的话。像这样:

Cursor.execute("update table emp set column1 = %(obj)s where id = %(obj_id)s",
               {'obj': obj, 'obj_id': n})