如何使用 psycopg2 指定要插入到另一个表的行数?

问题描述 投票:0回答:0

我想将大约 500k 的记录从一张表复制到另一张表。要指定我只想从行中复制一列。

我当然不想在一个大的插入语句中执行此操作,所以我想知道如何使用批量插入来执行此操作,问题是我不确定我是否正确理解了 batch_insert 在这里的工作方式。我想要实现的是将 1000 行的一部分插入到另一个表中。

这是我的方法:

#!/usr/bin/python
import psycopg2
import psycopg2.extras
from config import config

def connect():
    conn = None
    try:
        params = config()
        conn = psycopg2.connect(**params)
        cur = conn.cursor()
    
        with conn.cursor() as cur:
            cur.execute("select id from old_table where id like '%test%'")
            results = cur.fetchall()
    
    sql = "insert into new_table select id from old_table where id like '%test%'"

    with conn.cursor() as cur:
        data_gen =  ((rIdx, cIdx, value) for rIdx, cData in enumerate(results) for cIdx, value in enumerate(cData))
        psycopg2.extras.execute_batch(cur, sql, data_gen, page_size=1000*len(results[0]))
        conn.commit()
   
except (Exception, psycopg2.DatabaseError) as error:
    print(error)
finally:
    if conn is not None:
        conn.close()

有人可以告诉我,如果我做对了,这将批量插入 1000 行,直到所选产品列表的末尾?

编辑: 我可以看到在 execute_batch 到我的新表之后,我没有插入指定数量的记录,而是插入了更多重复项。为什么? :( 我在较小的示例中尝试插入 248 条记录,但在新表中有 1,783,616 条新记录,而不是 248 条,这对我来说是完全无法理解的。我做错了什么? 我计算出 1,783,616 是 248 * 248 * size_of_record (29)。

感谢您的帮助。

python insert psycopg2 execute
© www.soinside.com 2019 - 2024. All rights reserved.