有没有办法使用psycopg2批量插入多个表?

时间:2017-09-04 21:16:56

标签: python postgresql 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中是否有允许批量插入而不是顺序插入的功能?

由于

1 个答案:

答案 0 :(得分:0)

默认情况下,当您连接到cursor.commit()数据库并开始使用游标时,将打开一个事务。当您 <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="8dp" android:hardwareAccelerated="true" app:cardPreventCornerOverlap="false" android:elevation="0dp"> <ImageView android:id="@+id/item_cover" android:layout_width="match_parent" android:scaleType="fitXY" android:adjustViewBounds="true" android:layout_height="wrap_content" /> </android.support.v7.widget.CardView> 时,将使用相同游标执行的所有语句都将被提交。如果不是,您的陈述将被回滚。因此,在您的情况下,您的两个语句都将被提交或不提交。

查看有关transactions

的文档