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

时间:2019-03-24 11:02:36

标签: python-3.x postgresql iteration numpy-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个小时以上。有没有更有效的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

使用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参数来进一步调整吞吐量。