Импортируйте файл .csv в PostgreSQL и добавьте автоинкрементный идентификатор в первый столбец. - python-3.x


0

Я загрузил 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()

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

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

Любые идеи о том, как обойти это?

  •  88
  •  1
  • 11 май 2020 2020-05-11 10:17:06

1 ответ

0

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

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

в

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

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