在遍历非常大的 ndarray 时,是否有更快的方法将记录插入 postgresql 数据库?

Is there a faster way to insert records to postgresql database while iterating over very large ndarray?

我正在尝试遍历 ndarray 以将其索引和值记录到 postgresql。这是我的代码:

    for idx, val in enumerate(data):
        cur.execute("INSERT INTO public.spams(review_id, label, confidence_level, aoc, created_at) VALUES (%s, %s, %s, %s, %s)", (idx+1, spamlabel, 0, 0, dt.now()))

ndarray 的大小为 762k,插入这些值花费了 8 多个小时。有没有更有效的方法来做到这一点?

使用 psycopg2 的 execute_values 辅助方法并提供常量来限制我们必须传输的数据,例如:

from psycopg2 import extras

extras.execute_values(
    cur,
    "INSERT INTO public.spams(review_id, label, confidence_level, aoc, created_at) VALUES %s",
    enumerate(data),
    template = "(%s + 1, %s, 0, 0, CURRENT_TIMESTAMP)")

您还可以试验 page_size 参数以进一步调整吞吐量。