PostgreSQL импортирует CSV-файлы в два этапа с помощью одного скрипта (psycopg2)

#python #database #postgresql #csv

#python #База данных #postgresql #csv

Вопрос:

Я немного запутался, так как мне нужно импортировать один пакет CSV-файлов в базу данных PostgreSQL на первом этапе, а затем добавить другой пакет на втором этапе. Например, CSV-файлы второго этапа являются дополнительным CSV-файлом «обновления». Это должно быть в одной программе.

Итак, мой вопрос в том, как бы я поступил с этим в python, нужно ли мне использовать двухфазные коммиты или есть другое решение?

Любая помощь приветствуется!

Ответ №1:

Вы можете использовать метод psycopg2 copy_from . Грубый пример (измените пользователя, имя файла, разделитель и т.д. По своему усмотрению):

 import psycopg2

def read_csv_file(file_name, table_name):
    con = psycopg2.connect("host=your_host dbname=your_db user=your_user")
    cur = con.cursor()
    with open(file_name, "r") as f:
        cur.copy_from(f, table_name, sep=",")
    con.commit()

csv_list = [
    ("file1.csv", "table1"),
    ("file2.csv", "table2"),
    ("file3.csv", "table3"),
]

for file_name, table_name in csv_list:
    read_csv_file(file_name, table_name)
  

Поскольку copy_from добавляется в таблицу, вы можете повторить это для CSV-файлов «update».

Комментарии:

1. Итак, нужно ли мне писать оператор with для каждого файла csv или я могу ввести путь и выбрать все файлы CSV первого этапа и т.д., Или это будет проблемой, поскольку файлы CSV должны заполнять около 8 таблиц?

2. Один вызов copy_from считывает один CSV. Таким образом, вы могли бы поместить его в функцию и вызвать ее несколько раз.