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

时间:2015-11-12 20:27:39

标签: python postgresql psycopg2

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

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

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

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

但是我收到了一个错误:

  

Psycopg2编程错误。

1 个答案:

答案 0 :(得分:0)

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

这可能不是你打算做的。实际上,您的emp表可能甚至没有名为obj的列,这就是您收到错误的原因。

您要做的是发出parameterized query

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

警告:这会覆盖表中每一行的column1。如果您有意,请确保UPDATE还包含WHERE条款。像这样:

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