2017-12-15 11 views
0

私はPostgreSQL v9.4.12を使用していますが、jsonbカラムを更新しようとしています。私はオブジェクトの特定のキーではなく、jsonオブジェクト全体を更新したい。シングル引用符を含むjsonでPostgreSQLのjsonbフィールドを更新します

私はオブジェクトを格納するために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は私の辞書であるとjsonb_columnはJSONデータを保持するカラムの名前であること。

エラー私は取得しています:

psycopg2.ProgrammingError: syntax error at or near "s"

LINE 1: ...code": "BR3", "short_description": "This property's price is...

           ^

私はjson.dumps()は、単一引用符をエスケープが、それはケースのように思われないと仮定しました。このエラーを克服するソリューションはありますか?

ありがとうございます。

+0

jsonb?.. 9.3?確かに? –

+0

おっと!私が使っているのは9.4.12です。 – christinabo

+0

文字列の中の '{}'は、単純な位置指定のフォーマットです。https://pyformat.info/ – christinabo

答えて

2

JSONは例えば、単一引用符と非常に細かいです:

t=# select $${"short_description": "This property's price is..."}$$::jsonb; 
         jsonb 
------------------------------------------------------ 
{"short_description": "This property's price is..."} 
(1 row) 

ので、私は、文字列連結の練習がある単一引用符での文の構造化例外を回避するために

+0

ありがとう、それは私が必要としていたものです。出来た。 – christinabo

1

、あなたはドル記号の引用符を使用して試みることができると仮定します良い習慣ではありません。

documented in PsyCoPg2 docsの方が使いやすくなります。

cur.execute("UPDATE table SET jsonb_column = %s WHERE id = %s", [ json, id ]) 
関連する問題