我有两个班级:
"测试1":
class Test1(Base):
data = [
[1, 2],
[3, 4],
]
a = Column(Integer, primary_key=True)
b = Column(Integer, primary_key=True)
def __init__(self, a, b):
self.a = a
self.b = b
将由" Test2"
引用class Test2(Base):
data = [
[1, 1, 2],
[2, 3, 4],
]
id = Column(Integer, primary_key=True)
c = Column(ForeignKey(Test1.a))
d = Column(ForeignKey(Test1.b))
__table_args__ = (ForeignKeyConstraint([c, d], [Test1.a, Test1.b]), {})
def __init__(self, id, c, d):
self.id = id
self.c = c
self.d = d
当尝试使用本地PostgreSQL数据库在SQLAlchemy(Python 3)中创建这些时,我收到此错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) there is
no unique constraint matching given keys for referenced table "Test1"
[SQL: '\nCREATE TABLE "Test2" (\n\tid SERIAL NOT NULL, \n\ta1 INTEGER,
\n\tb1 INTEGER, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(a1, b1)
REFERENCES "Test1" (a, b), \n\tFOREIGN KEY(a1) REFERENCES "Test1" (a),
\n\tFOREIGN KEY(b1) REFERENCES "Test1" (b)\n)\n\n'] (Background on this
error at: http://sqlalche.me/e/f405)
总结一下,我试图通过引用的表的复合外键创建一个引用另一个表的表,但是大约有10次尝试解决方法,我无法解决这个问题。给任何人的金色饼干。
答案 0 :(得分:1)
Test1.a
和Test1.b
都不是一个(唯一的)密钥,尽管您尝试使用ForeignKey(Test1.a)
和ForeignKey(Test1.b)
来引用它们。只需删除它们。您定义的复合外键也是正确的。