在遍历非常大的 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
参数以进一步调整吞吐量。
我正在尝试遍历 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
参数以进一步调整吞吐量。