Python 如何在postgresql中向主键添加id?

Python 如何在postgresql中向主键添加id?,python,postgresql,psycopg2,unique-constraint,Python,Postgresql,Psycopg2,Unique Constraint,我正在尝试将数据插入python中的postges数据库。这是我的表: 创建表如果不存在fp\u存储\u数据\u测试( 时间整数, 瓦查尔省(20), 瓦尔查尔市(20), market_id整数唯一不为空, product_id整数唯一不为空, 价格整数, 数量整数, 你卖过INTEGER吗, 主键(时间、城市、省、市场id、产品id) ); 这是我的python函数,它尝试向数据库添加数据: def将数据添加到数据库(光标、地址): 文件列表=列表目录(地址) 对于文件列表中的文件: f

我正在尝试将数据插入python中的postges数据库。这是我的表:

创建表如果不存在fp\u存储\u数据\u测试(
时间整数,
瓦查尔省(20),
瓦尔查尔市(20),
market_id整数唯一不为空,
product_id整数唯一不为空,
价格整数,
数量整数,
你卖过INTEGER吗,
主键(时间、城市、省、市场id、产品id)
);
这是我的python函数,它尝试向数据库添加数据:


def将数据添加到数据库(光标、地址):
文件列表=列表目录(地址)
对于文件列表中的文件:
f=打开(地址+文件“r”)
对于f中的行:
数据=行。拆分(“,”)
query=“插入fp\u存储\u数据\u测试”\
值({},{},{},{},{},{},{},{},{},{},{},{})\
.格式(数据[0]、数据[1]、数据[2]、数据[3]
,数据[4],数据[5],数据[6],数据[7])
cursor.execute(查询)
打印(数据)
但这个错误出现了:

psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "fp_stores_data_test_market_id_key"
DETAIL:  Key (market_id)=(1) already exists.

我不知道如何摆脱默认id。

我不确定您数据库中的语义,但如果它是我所理解的,那么(对我来说)很明显,几个不同的市场可以处理相同的产品,而且每个市场可以处理多个产品。如果是这种情况,则不应在表中声明
市场id
产品id
notnull
可以,但也不是必需的,因为它们都是主键的一部分。据我所知,Postgresql不允许主键中有
NULL
值。因此,应声明该表:

CREATE TABLE IF NOT EXISTS fp_stores_data_test (
    time INTEGER,
    province VARCHAR(20),
    city VARCHAR(20),
    market_id INTEGER,
    product_id INTEGER,
    price INTEGER, 
    quantity INTEGER,
    has_sold INTEGER,
    PRIMARY KEY (time, city, province, market_id ,product_id)
);

如果
market\u id
product\u id
请参考市场和产品表中的id列,这些id列位于resp的主键中。表中,我还主张将它们都声明为
外键

您为字段market\u id定义了唯一约束,因此您只能插入market+id=1的一行。具有相同市场id的第二行导致违反约束错误。我的意思是,您不需要对标记的\u id和产品\u id进行唯一约束,而是需要对这些字段的组合进行唯一索引