Олицетворять весь процесс, а не просто поток

Проблема в том, что вы определили каждый из зависимых столбцов как внешние ключи отдельно, когда это не совсем то, что вы намереваетесь, вы, конечно, хотите составной внешний ключ. 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, работает правильно.

0
задан astef 24 February 2015 в 16:07
поделиться