2014-11-11 5 views
6

Ho una tabella in postgresql con una colonna di tipo JSON. Sto cercando di aggiungere dati al tavolo.psycopg2: scrittura di oggetti JSON utilizzando copy_from. Come formattare la stringa JSON?

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

Ha funzionato come un fascino. Ma ora ho bisogno di aumentare davvero il rendimento. Ecco il codice che non funziona:

import StringIO,psycopg2,json 

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

JSON scritta nel buffer non è compatibile con copy_from. Ad esempio, i caratteri '\' devono essere sottoposti a escape in modo che '\ n' debba essere '\\ n'.

Come posso scrivere una stringa sul buffer in modo che copy_from inserisca il json corretto nel mio tavolo?

Grazie

risposta

2

ho trovato una soluzione che sembra funzionare per ora:

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() 

non amo questo perché come faccio a sapere che non ci sono altri problemi? Forse dovrei fare una richiesta di funzionalità ai ragazzi di psycopg2?