У меня есть два класса:
"Test1":
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
При попытке сделать это в SQLAlchemy (Python 3) с использованием локальной базы данных PostgreSQL я получаю эту ошибку:
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 попытками обходного пути я не могу решить эту проблему. Золотое печенье для тех, кто делает.