[英]Why am I getting a 'not unique' error when referencing a primary key?
I have two models - 我有两种型号-
Station: 站:
class Station(db.Model):
"""Measurement station"""
__tablename__ = "station"
reference = db.Column(db.Text, nullable=False, primary_key=True)
name = db.Column(db.Text, nullable=False, primary_key=True)
status = db.Column(db.Text)
river_analyses = db.relationship("RiverAnalysis")
and 和
RiverAnalysis: RiverAnalysis:
class RiverAnalysis(db.Model):
__tablename__ = "river_analysis"
id = db.Column(db.Integer, nullable=False, primary_key=True)
reference = db.Column(db.Text, db.ForeignKey("station.reference"), nullable=False)
station_ref = db.relationship("Station", foreign_keys=reference)
When I try to run flask db upgrade
using this migration code 当我尝试使用此迁移代码运行
flask db upgrade
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('river_analysis', sa.Column('reference', sa.Text(), nullable=False))
op.create_foreign_key(None, 'river_analysis', 'station', ['reference'], ['reference'])
I get this error: (psycopg2.ProgrammingError) there is no unique constraint matching given keys for referenced table "station"
. 我收到此错误:
(psycopg2.ProgrammingError) there is no unique constraint matching given keys for referenced table "station"
。
Why am I getting this even though station.reference
is a primary key of Station
? 即使
station.reference
是Station
的主键,我为什么也得到这个?
Thanks for any help you can provide. 感谢您的任何帮助,您可以提供。
reference
alone is not your primary key, but the pair (reference, name)
. 单独
reference
不是您的主键,而是对(reference, name)
。 In order to reference that key you need a composite foreign key constraint : 为了引用该键,您需要一个复合外键约束 :
class RiverAnalysis(db.Model):
__tablename__ = "river_analysis"
id = db.Column(db.Integer, nullable=False, primary_key=True)
reference = db.Column(db.Text, nullable=False)
name = db.Column(db.Text, nullable=False)
__table_args__ = (
db.ForeignKeyConstraint(
[reference, name],
["station.reference", "station.name"]),
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.