我目前正在批量插入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的最佳方法是什么?
答案 0 :(得分:0)
使用大于批量大小的returning
和page_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
小于批量大小,则游标内容未定义,可能是最后一批。