проблема с созданием отношения sqlalchemy / join с несколькими внешними ключами [duplicate]

О ответе Дж. Хардимана, как насчет:

SELECT empName, projIDs=
  REPLACE(
    REPLACE(
      (SELECT REPLACE(projID, ' ', '-somebody-puts-microsoft-out-of-his-misery-please-') AS [data()] FROM project_members WHERE empName=a.empName FOR XML PATH('')), 
      ' ', 
      ' / '), 
    '-somebody-puts-microsoft-out-of-his-misery-please-',
    ' ') 
  FROM project_members a WHERE empName IS NOT NULL GROUP BY empName

Кстати, это использование «Фамилии» опечатки или я не понимаю понятия здесь?

В любом случае, спасибо, много парней, потому что это спасло меня довольно долго:)

35
задан Tshepang 12 March 2014 в 19:27
поделиться

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, работает правильно.

58
ответ дан SingleNegationElimination 25 August 2018 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: