Как экспортировать данные из CSV файла в таблицу PostgreSQL при помощи python?

Как экспортировать данные из файла CSV в таблицу PostgreSQL так, чтобы они заменялись, а не добавлялись к уже имеющимся?
Сейчас приходится вначале очищать таблицу, а потом только добавлять данные при помощи следующего кода:

import psycopg2

    
conn = psycopg2.connect("host=localhost dbname=postgres user=postgres password=1111111")
    cur = conn.cursor()
    with open('file.csv', 'r', encoding="utf-8") as f:
        next(f)
        cur.copy_from(f, 'table_name', sep=',')
    conn.commit()


Но данные добавляются, а нужно заменять.
  • Вопрос задан
  • 1646 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Без знания структуры данных и структуры таблицы тут мало что понять можно.
Но вообще, вместо тупого копирования из csv через copy_from*(), нужно:
1. Читай файл самостоятельно. Используй модуль csv, он умеет удобно парсить этот формат, в том числе пропускать строку заголовков.
2. Выбери в своих данных первичный ключ, чтобы понять, когда такая строка уже есть в базе, а когда её ещё нет. При создании таблицы укажи первичным ключом соотв. столбец.
3. вставляй данные через запрос вида INSERT ... ON CONFLICT UPDATE. Точный синтаксис нужно посмотреть в документации на постгрес, обычно это называется UPSERT.

Проблема с copy_from() в том, что у тебя таблица БД должна иметь тот же набор столбцов и в том же порядке, что и CSV, хотя это ограничение совершенно необязательно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы