如何将 id 添加到 postgresql 中的主键?
How to add id to a primary key in postgresql?
我正在尝试将数据插入 python.This 中的 postges 数据库是我的 table:
CREATE TABLE IF NOT EXISTS fp_stores_data_test (
time INTEGER,
province VARCHAR(20),
city VARCHAR(20),
market_id INTEGER UNIQUE NOT NULL,
product_id INTEGER UNIQUE NOT NULL,
price INTEGER,
quantity INTEGER,
has_sold INTEGER,
PRIMARY KEY (time, city, province, market_id ,product_id)
);
这是我的 python 函数,它试图将数据添加到数据库:
def add_data_to_db(cursor, address):
list_of_files = listdir(address)
for file_ in list_of_files:
f = open(address+file_, "r")
for line in f:
data = line.split(",")
query = "INSERT INTO fp_stores_data_test "\
"VALUES ({},'{}','{}',{},{},{},{},{})"\
.format(data[0],data[1],data[2],data[3]
,data[4],data[5],data[6],data[7])
cursor.execute(query)
print(data)
但是出现这个错误:
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "fp_stores_data_test_market_id_key"
DETAIL: Key (market_id)=(1) already exists.
我不知道如何删除该默认 ID。
我不确定你的数据库中的语义,但如果它是我所理解的,那么(对我来说)很明显,几个不同的市场可以处理相同的产品,而且每个市场可以处理不止一个产品。如果是这种情况,那么 market_id
和 product_id
都不应该在 table 中声明为 UNIQUE
。 NOT NULL
可以,但也不是必需的,因为它们都是主键的一部分。据我所知,Postgresql 不允许在主键中使用 NULL
值。因此 table 应该声明为:
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_id
和 product_id
引用 table 中市场和产品的 id 列,并且这些 id 列在 resp 的主键中。 table,我还主张将它们都声明为 FOREIGN KEY
我正在尝试将数据插入 python.This 中的 postges 数据库是我的 table:
CREATE TABLE IF NOT EXISTS fp_stores_data_test (
time INTEGER,
province VARCHAR(20),
city VARCHAR(20),
market_id INTEGER UNIQUE NOT NULL,
product_id INTEGER UNIQUE NOT NULL,
price INTEGER,
quantity INTEGER,
has_sold INTEGER,
PRIMARY KEY (time, city, province, market_id ,product_id)
);
这是我的 python 函数,它试图将数据添加到数据库:
def add_data_to_db(cursor, address):
list_of_files = listdir(address)
for file_ in list_of_files:
f = open(address+file_, "r")
for line in f:
data = line.split(",")
query = "INSERT INTO fp_stores_data_test "\
"VALUES ({},'{}','{}',{},{},{},{},{})"\
.format(data[0],data[1],data[2],data[3]
,data[4],data[5],data[6],data[7])
cursor.execute(query)
print(data)
但是出现这个错误:
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "fp_stores_data_test_market_id_key"
DETAIL: Key (market_id)=(1) already exists.
我不知道如何删除该默认 ID。
我不确定你的数据库中的语义,但如果它是我所理解的,那么(对我来说)很明显,几个不同的市场可以处理相同的产品,而且每个市场可以处理不止一个产品。如果是这种情况,那么 market_id
和 product_id
都不应该在 table 中声明为 UNIQUE
。 NOT NULL
可以,但也不是必需的,因为它们都是主键的一部分。据我所知,Postgresql 不允许在主键中使用 NULL
值。因此 table 应该声明为:
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_id
和 product_id
引用 table 中市场和产品的 id 列,并且这些 id 列在 resp 的主键中。 table,我还主张将它们都声明为 FOREIGN KEY