Ответ 1
Проблема заключается в том, что вы определили каждый из зависимых столбцов как внешние ключи отдельно, когда это не совсем то, что вы намереваетесь, вы, конечно, хотите составной внешний ключ. Sqlalchemy отвечает на это, говоря (не очень понятным образом), что он не может угадать, какой внешний ключ использовать (firstName
или lastName
).
Решение, объявляющее составной внешний ключ, является довольно сложным в декларативном, но довольно очевидным:
class Book(Base):
__tablename__ = 'books'
title = Column(String(20), primary_key=True)
author_firstName = Column(String(20))
author_lastName = Column(String(20))
__table_args__ = (ForeignKeyConstraint([author_firstName, author_lastName],
[Author.firstName, Author.lastName]),
{})
Важно то, что определения ForeignKey
исчезают из отдельных столбцов, а ForeignKeyConstraint
добавляется к переменной класса __table_args__
. При этом relationship
, определяемый на Author.books
, работает правильно.