Как я могу импортировать данные из Excel в postgres - отношения многие ко многим - PullRequest
0 голосов
/ 19 января 2020

Я создаю веб-приложение и столкнулся с проблемой при импорте данных в таблицу в базе данных postgress. У меня есть Excel с id_b и id_cat (идентификаторы книг и идентификаторы категорий) Книги имеют несколько категорий и категории могут быть назначены для многих книг, Excel выглядит следующим образом: данные Excel

Это имеет 30 000 записей.

У меня проблема с импортом в базу данных (Postgres). Таблица для этих данных имеет два столбца: id_b и id_cat. Я хотел экспортировать эти данные в CSV таким образом, каждой книге должен быть присвоен идентификатор категории (например, книга с идентификатором 1 должна появляться 9 раз, потому что ей присвоено 9 категорий и т. Д.), Но я не могу сделай это легко. Это должно выглядеть так: правильные данные Кто-нибудь знает, как получить данные в этой форме?

1 Ответ

1 голос
/ 19 января 2020

Ваш формат листа Excel имеет большое количество столбцов, что также зависит от количества категорий, и SQL не очень хорошо приспособлен к этому.

Самый простой вариант:

Экспорт данных Excel в формате CSV.

Используйте сценарий python, чтобы прочитать его с помощью модуля CSV и вывести в формате COPY-удобные символы табуляции.

Загрузите это в базу данных (или вставьте непосредственно из сценария python).

Что-то в этом роде ...

import csv

with open('bookcat.csv') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        if row:
            id = row[0].strip()
            categories = row[1:]
            for cat in categories:
                cat = cat.strip()
                if cat:
                    print("%s\t%s" % (id, cat))

версия вывода csv:

import csv

with open('bookcat.csv') as csvfile, open("out.csv","w") as outfile:
    reader = csv.reader(csvfile)
    writer = csv.writer(outfile)
    for row in reader:
        if row:
            id = row[0].strip()
            categories = row[1:]
            for cat in categories:
                cat = cat.strip()
                if cat:
                    writer.writerow((id, cat))

Если вам нужен определенный c формат CSV, проверьте документы модуля CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...