django - 将 .csv 文件导入 PostgreSQL 并在第一列添加一个自动递增的 ID

标签 django python-3.x postgresql

我已经下载了一个用于测试目的的 csv 文件,并想将所有数据上传到 postgresql 数据库。但是,我需要一个自动递增的 ID 作为数据库的第一列。最初,我使用 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()

如果我不创建初始 ID 列,这可以正常工作。

但是,如果我这样运行它,我会收到一条错误消息,指出我正在尝试将品牌名称插入 ID。

关于如何解决这个问题有什么想法吗?

最佳答案

尝试改变:

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

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

在不提供列的情况下使用 INSERT INTO 时,postgres 按原始顺序使用表中的所有列。

关于django - 将 .csv 文件导入 PostgreSQL 并在第一列添加一个自动递增的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433695/

相关文章:

python - 注销无法正常工作 Django 1.9

python - 提高配置不当的psycopg2(postgresql)

python - 有没有办法打印 __init__ 方法中创建的对象的所有参数?

python - 在 python 2 和 3 中使用 input/raw_input

postgresql - PostgreSQL 连接字符串/URL 的格式是什么?

sql - Postgresql 串行每日记录计数

python - 以 django 形式动态填充值

javascript - django include_javascript/use_javascript 和类似的

python - 根据某些行/条件将表格格式化为多列

Django:从具有外键的两个表中选择数据到第三个表