使用包含单引号的json更新PostgreSQL中的jsonb字段

时间:2017-12-15 15:49:46

标签: python python-3.x postgresql postgresql-9.3 jsonb

我正在使用PostgreSQL v9.4.12而我正在尝试更新jsonb列。我想更新整个json对象而不是对象的特定键。

我正在使用Python dict来存储我的对象,在使用之前我使用json.dumps()将其转换为json格式的String。 但是,json的值是单引号',在尝试更新时会引发psycopg2.ProgrammingError: syntax error

到目前为止,我已经尝试过了:

"UPDATE table "
"SET jsonb_column='{} ".format(json.dumps(new_data)) + ""
"WHERE id='12345'"

请注意new_data是我的dict,jsonb_column是包含json数据的列的名称。

我得到的错误:

  

psycopg2.ProgrammingError:“s”或附近的语法错误

     

第1行:...代码“:”BR3“,”short_description“:”此属性的价格   是...

                                                  ^

我假设json.dumps()逃脱了单引号,但似乎并非如此。有没有解决方案来克服这个错误?

提前致谢。

2 个答案:

答案 0 :(得分:3)

单引号json非常好,例如:

{{1}}

所以我假设您可以尝试使用美元符号引号,以避免语句结构化带有单引号的异常

答案 1 :(得分:2)

字符串连接的做法不是一个好习惯。

更好地使用documented in PsyCoPg2 docs的方式。

cur.execute( "UPDATE table SET jsonb_column = %s WHERE id = %s", [ json, id ] )