问题是,您已经将每个依赖列分别定义为外键,当这不是您真正想要的时,您当然想要一个复合外键。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
工作正常。