Импортируйте файл .csv в PostgreSQL и добавьте автоинкрементный идентификатор в первый столбец. - PullRequest
1 голос
/ 17 октября 2019

Я загрузил CSV-файл для тестирования и хотел бы загрузить все данные в базу данных postgresql. Однако мне нужно иметь автоинкрементный идентификатор в качестве первого столбца БД. Сначала я создал базу данных с помощью SQL-запроса:

CREATE TABLE pps3
(  id integer NOT NULL DEFAULT 
   nextval('products_product_id_seq'::regclass),
  "brandname" character varying(25),
  "type1" integer,
  "type2" integer,
  "type3" integer,
  "Total" integer ) 

Данные CSV:

"brandname","type1","type2","type3","Total"
"brand1","0","0","32","32"
"brand1","0","12","0","12"

Я пытался переместить данные из CSV с помощью этого кода:


import csv
import psycopg2

conn = psycopg2.connect("host=localhost dbname=my_django_db user=postgres")
cur = conn.cursor()
with open('PPS-Sep.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader) # Skip the header row.
    for row in reader:
        cur.execute(
        "INSERT INTO pps3 VALUES (%s, %s, %s, %s,%s)",row)

conn.commit()

Это работает нормально, если я не создаю столбец начального идентификатора.

Однако, если я запускаю его таким образом, я получаю сообщение об ошибке, что я пытаюсь вставить название бренда в идентификатор.

Есть какие-нибудь идеи о том, как обойти это?

1 Ответ

2 голосов
/ 17 октября 2019

Попробуйте изменить:

INSERT INTO pps3 VALUES (%s, %s, %s, %s)

на

INSERT INTO pps3(type1, type2, type3, Total) VALUES (%s, %s, %s, %s)

При использовании INSERT INTO без предоставления столбцов postgres использовал все столбцы из таблицы в исходном порядке.

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