Есть ли более быстрый способ вставки записей в базу данных postgresql при итерации по очень большой ndarray? - PullRequest
1 голос
/ 24 марта 2019

Я пытаюсь перебрать 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 голосов
/ 24 марта 2019

Используйте вспомогательный метод 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для дальнейшей настройки пропускной способности.

...