使用python psycopg2 execute_values从批量插入中获取身份ID到redshift

时间:2017-12-04 07:18:52

标签: python postgresql amazon-redshift psycopg2 batch-insert

我目前正在批量插入Redshift(Postgres)数据库。我正在使用psycopg2.extras.execute_values方法,从我所读到的,这是使用下面的代码构建包含要插入的数据的元组列表的最快方法

    dataList = []
    dataList.append(tuple(data.values()))

    insert_query = "insert into " + tableName + " ( " + insert + ") VALUES %s"

    try:
        psycopg2.extras.execute_values(cur, insert_query, dataList, template=None, page_size=100)
        con.commit()

这很好用,但是我需要从DB上的标识列中取回id。我已经搜索过这个方法是否可行,但无法找到关于execute_values方法是否可行的确切答案?

如果没有,实现此批量插入并检索id的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

使用大于批量大小的returningpage_size

insert_query = "insert into t (c) values %s returning *"
execute_values(cursor, insert_query, data, template=None, page_size=99999)
rows = cursor.fetchall()

如果page_size小于批量大小,则游标内容未定义,可能是最后一批。