2017-09-04 7 views
0

私はしたい複数のテーブルに次の挿入があります。現在、私は、彼らが1であることを保証しながら、私は誰もが、私はちょうどロールバックすることができます失敗したようにコミット上記同時に挿入をやりたい次psycopg2を使用して複数の表にバッチ挿入する方法はありますか?

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"]) 
    ) 

のように順番にやっています。

psycopg2には、バッチ挿入が可能であり、順次挿入ではない機能がありますか?あなたはpostgresqlデータベースに接続して、カーソルを使用して起動時にデフォルトで

おかげ

答えて

0

は、トランザクションが開かれます。 cursor.commit()を実行すると、同じカーソルで実行するすべてのステートメントがコミットされます。そうでない場合は、ステートメントがロールバックされます。だからあなたのケースでは、どちらのステートメントもコミットされるか、またはどちらもコミットされません。

transactionsに関するドキュメントをご覧ください。

関連する問題