2017-09-04 1 views
0

Ich habe folgendes Einfügen in mehrere Tabellen, die ich machen möchte. Zur Zeit mache ich sie der Reihe nach wie folgtGibt es eine Möglichkeit, Stapel in mehrere Tabellen mit psycopg2 einfügen?

db_cursor.execute("INSERT INTO my_table1 (\ 
         my_foreign_id1, \ 
         my_foreign_id2, \ 
         some_meta_info1, \ 
         some_meta_info2) \ 
       VALUES (%s, %s, %s, %s) RETURNING *", 
     (my_dict["my_foreign_id1"], 
     my_dict["my_foreign_id2"], 
     my_dict["some_meta_info1"], 
     my_dict["some_meta_info2"]) 
    ) 

    db_cursor.execute("INSERT INTO my_table2 (\ 
         my_foreign_id1, \ 
         my_foreign_id2, \ 
         some_note_info1, \ 
         some_note_info2) \ 
       VALUES (%s, %s, %s, %s) RETURNING *", 
     (my_dict["my_foreign_id1"], 
     my_dict["my_foreign_id2"], 
     my_dict["some_note_info1"], 
     my_dict["some_note_info2"]) 
    ) 

ich den Einsatz oben gleichzeitig tun wollen, während sichergestellt wird, dass sie in einem sind begehen, so dass jeder nicht ich gerade wieder rollen kann.

Gibt es Funktionalität in psycopg2, die Batch-einfügen und nicht sequenzielle einfügen?

Dank

Antwort

0

standardmäßig, wenn Sie auf Ihre postgresql Datenbank verbinden und starten Sie einen Cursor zu verwenden, wird eine Transaktion eröffnet. Alle Anweisungen, die Sie mit demselben Cursor ausführen, werden übergeben, wenn Sie cursor.commit(). Wenn dies nicht der Fall ist, werden Ihre Aussagen zurückgesetzt. In Ihrem Fall werden also beide Ihrer Aussagen übernommen oder keine.

Werfen Sie einen Blick auf die Dokumentation über die transactions.

Verwandte Themen