2017-12-15 2 views
0

Ich benutze PostgreSQL v9.4.12 und ich versuche, eine jsonb Spalte zu aktualisieren. Ich möchte das gesamte Json-Objekt und nicht einen bestimmten Schlüssel des Objekts aktualisieren.Aktualisieren Sie JSON-Feld in PostgreSQL mit JSON, das einzelnes Anführungszeichen enthält

Ich verwende ein Python dict, um mein Objekt zu speichern, und bevor ich es benutze, verwende ich json.dumps(), um es in einen json formatierten String umzuwandeln. Allerdings hat ein Wert des JSON ein einfaches Anführungszeichen ', das beim Aktualisieren einen psycopg2.ProgrammingError: syntax error auslöst.

Bisher habe ich versucht:

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

Beachten Sie, dass new_data meine dict ist und jsonb_column ist der Name der Spalte, die die JSON-Daten zu halten.

Der Fehler Ich erhalte:

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

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

           ^

ich davon aus, dass json.dumps() das Apostroph entkommt aber scheint nicht, dass der Fall zu sein. Gibt es eine Lösung, um diesen Fehler zu beheben?

Vielen Dank im Voraus.

+0

jsonb? .. 9.3? .. sicher? –

+0

Hoppla! Es ist 9.4.12, die ich benutze. – christinabo

+0

Die '{}' innerhalb der Zeichenfolge ist die einfache Positionierungsformatierung https://pyformat.info/ – christinabo

Antwort

2

json ist sehr fein mit Apostroph, zB:

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

so konnte ich annehmen, dass Sie versuchen, mit Dollarzeichen Anführungszeichen Aussage Strukturierung Ausnahme mit einfachen Anführungszeichen

+0

Danke, das war genau das, was ich brauchte. Es funktionierte. – christinabo

1

Die Praxis der String-Verkettung zu vermeiden ist, keine gute Praxis.

Besser verwenden Sie den Weg documented in PsyCoPg2 docs.

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