【发布时间】:2023-03-08 21:10:01
【问题描述】:
我想创建两张表,一张包含唯一的 City 和 Country 值,另一张包含 City、Country、timestamp 和 VisitedDays 的值。 City 和 Country 将是表 1 中的复合主键。
我对下面的脚本有一个问题,即我无法输入一个新行,其中包含先前添加到表 2 中的城市和国家/地区值。换句话说,我无法输入第二次前往同一城市的数据和表 2 中的国家/地区。有没有办法让复合主键和多行具有相同的外键值。根据错误,我的问题与 ID 的 UNIQUE 声明有关。
错误:
psycopg2.IntegrityError:重复键值违反唯一约束“trips_pkey” 详细信息:key (city, country) = (San Juan, Puerto Rico) 已经存在。
注意:我为这个问题减少了大部分脚本。在原始脚本中,表 1(primaryIds)仅在存在不同(城市、国家/地区)时才会填充,而表 2 中会填充每个日志(行程)。此外,我没有为表 2 包括脚本的插入部分,因为它适用于所有条目,除了相同的(城市,国家)。
import sys, psycopg2
with psycopg2.connect("dbname='XXXXX' user='YYYYY' password='ZZZZ'") as outdb:
cur. outdb.cursor()
cur.execute("CREATE TABLE primaryIds "
"( "
"City VARCHAR(20) NOT NULL, "
"Country VARCHAR(20) NOT NULL, "
"PRIMARY KEY (City, Country), "
"UNIQUE (City) "
"); ")
cur.execute("INSERT INTO primaryIds "
"(City, Country)"
" VALUES "
"(%s, %s)", (a, b))
cur.execute("CREATE TABLE trips "
"( "
"City VARCHAR(20) NOT NULL, "
"Country VARCHAR(20) NOT NULL, "
"Timestamp TIMESTAMP, "
"visitedDays INT, "
"Ids VARCHAR(20) REFERENCES primaryIds(City), "
"PRIMARY KEY (City, Country) "
"); ")
【问题讨论】:
标签: python postgresql