尝试引用复合外键时获取sqlalchemy.exc.ProgrammingError

时间:2018-05-08 18:40:00

标签: python python-3.x postgresql sqlalchemy

我有两个班级:

"测试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次尝试解决方法,我无法解决这个问题。给任何人的金色饼干。

1 个答案:

答案 0 :(得分:1)

Test1.aTest1.b都不是一个(唯一的)密钥,尽管您尝试使用ForeignKey(Test1.a)ForeignKey(Test1.b)来引用它们。只需删除它们。您定义的复合外键也是正确的。