【问题标题】:Is there a way to batch insert to multiple tables using psycopg2? [duplicate]有没有办法使用 psycopg2 批量插入多个表? [复制]
【发布时间】:2017-09-04 21:16:56
【问题描述】:

我有以下插入到我想要做的多个表中。目前我正在按顺序执行它们,如下所示

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

谢谢

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    默认情况下,当您连接到postgresql 数据库并开始使用游标时,会打开一个事务。当您cursor.commit() 时,您使用相同游标执行的所有语句都将被提交。如果不是,您的语句将被回滚。因此,在您的情况下,您的两个语句都将被提交或都不提交。

    查看有关transactions 的文档。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 2021-11-16
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多