2014-11-11 8 views
6

Ich habe eine Tabelle in Postgresql mit einer Spalte des Typs JSON. Ich versuche Daten an die Tabelle anzuhängen.psycopg2: Schreiben von JSON-Objekten mit copy_from. Wie formatiere ich die JSON-Zeichenfolge?

cursor.execute("""INSERT INTO my_table VALUES(%s);""",(json.dumps(myobject)) 

Hat funktioniert wie ein Charme. Aber jetzt muss ich den Durchsatz wirklich erhöhen. Hier ist der Code, der nicht funktioniert:

import StringIO,psycopg2,json 

buffer = StringIO.StringIO(json.dumps(myobject)) 
cursor.copy_from(buffer,'my_table') 
connection.commit() 

Die json in den Puffer nicht kompatibel geschrieben mit copy_from ist. Zum Beispiel müssen '\' Zeichen mit Escapezeichen versehen werden, so dass '\ n' '\' n '' \ 'sein muss.

Wie kann ich eine Zeichenfolge in den Puffer schreiben, so dass copy_from den richtigen JSON in meine Tabelle einfügt?

Dank

Antwort

2

fand ich eine Lösung, die für jetzt scheint zu funktionieren:

import StringIO,psycopg2,json 

json_to_write = json.dumps(myobject).replace('\\','\\\\') 
buffer = StringIO.StringIO(json_to_write) 
cursor.copy_from(buffer,'my_table') 
connection.commit() 

ich nicht lieben, weil, wie ich weiß es nicht andere Probleme sind? Vielleicht sollte ich eine Feature-Anfrage an die psycopg2 Jungs machen?