我已经下载了一个用于测试目的的 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/